gdi32: Check for NULL pointer in GdiAlphaBlend.

This commit is contained in:
Markus Stockhausen 2009-09-18 13:42:11 +02:00 committed by Alexandre Julliard
parent 7471cfce72
commit e51b20bf05
2 changed files with 10 additions and 4 deletions

View File

@ -518,9 +518,11 @@ BOOL WINAPI GdiAlphaBlend(HDC hdcDst, int xDst, int yDst, int widthDst, int heig
DC *dcDst, *dcSrc; DC *dcDst, *dcSrc;
dcSrc = get_dc_ptr( hdcSrc ); dcSrc = get_dc_ptr( hdcSrc );
if (!dcSrc) return FALSE;
if ((dcDst = get_dc_ptr( hdcDst ))) if ((dcDst = get_dc_ptr( hdcDst )))
{ {
if (dcSrc) update_dc( dcSrc ); update_dc( dcSrc );
update_dc( dcDst ); update_dc( dcDst );
TRACE("%p %d,%d %dx%d -> %p %d,%d %dx%d op=%02x flags=%02x srcconstalpha=%02x alphafmt=%02x\n", TRACE("%p %d,%d %dx%d -> %p %d,%d %dx%d op=%02x flags=%02x srcconstalpha=%02x alphafmt=%02x\n",
hdcSrc, xSrc, ySrc, widthSrc, heightSrc, hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
@ -529,11 +531,11 @@ BOOL WINAPI GdiAlphaBlend(HDC hdcDst, int xDst, int yDst, int widthDst, int heig
blendFunction.SourceConstantAlpha, blendFunction.AlphaFormat); blendFunction.SourceConstantAlpha, blendFunction.AlphaFormat);
if (dcDst->funcs->pAlphaBlend) if (dcDst->funcs->pAlphaBlend)
ret = dcDst->funcs->pAlphaBlend( dcDst->physDev, xDst, yDst, widthDst, heightDst, ret = dcDst->funcs->pAlphaBlend( dcDst->physDev, xDst, yDst, widthDst, heightDst,
dcSrc ? dcSrc->physDev : NULL, dcSrc->physDev, xSrc, ySrc, widthSrc, heightSrc,
xSrc, ySrc, widthSrc, heightSrc, blendFunction ); blendFunction );
release_dc_ptr( dcDst ); release_dc_ptr( dcDst );
} }
if (dcSrc) release_dc_ptr( dcSrc ); release_dc_ptr( dcSrc );
return ret; return ret;
} }

View File

@ -2393,6 +2393,10 @@ static void test_GdiAlphaBlend(void)
expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, -1, 0, 30, 30, blend), TRUE, BOOL, "%d"); expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, -1, 0, 30, 30, blend), TRUE, BOOL, "%d");
expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, -1, 30, 30, blend), TRUE, BOOL, "%d"); expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, -1, 30, 30, blend), TRUE, BOOL, "%d");
SetLastError(0xdeadbeef);
expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, NULL, 0, 0, 20, 20, blend), FALSE, BOOL, "%d");
expect_eq(GetLastError(), 0xdeadbeef, int, "%d");
SelectObject(hdcDst, oldDst); SelectObject(hdcDst, oldDst);
SelectObject(hdcSrc, oldSrc); SelectObject(hdcSrc, oldSrc);
DeleteObject(bmpSrc); DeleteObject(bmpSrc);