Aric Stewart aric@codeweavers.com writes:
@@ -1569,12 +1570,14 @@ BOOL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT widthDst,
if (!devSrc->bitmap || GetObjectW( devSrc->bitmap->hbitmap, sizeof(dib), &dib ) != sizeof(dib)) {
FIXME("not a dibsection\n");
return FALSE;
TRACE("not a dibsection\n");
bitmap = FALSE;
It can be an invalid handle too, you can't assume that it's a valid bitmap just because it isn't a DIB. Also naming the boolean 'bitmap' for the DIB section case is very confusing, both are bitmaps.
- if (xSrc < 0 || ySrc < 0 || widthSrc < 0 || heightSrc < 0 || xSrc + widthSrc > dib.dsBmih.biWidth
|| ySrc + heightSrc > abs(dib.dsBmih.biHeight))
- if (xSrc < 0 || ySrc < 0 || widthSrc < 0 || heightSrc < 0 || (bitmap && xSrc + widthSrc > dib.dsBmih.biWidth)
|| (bitmap && ySrc + heightSrc > abs(dib.dsBmih.biHeight)))
Testing the flag all over the place is ugly, you should separate the code completely, have one block for DIBs and one block for DDBs, with a single if at the top.