msvfw32: Fix uncompressed bitmap size handling in DrawDibDraw.

This commit is contained in:
Akihiro Sagawa 2014-05-02 22:14:24 +09:00 committed by Alexandre Julliard
parent 47a3a0528d
commit af089289b3
2 changed files with 8 additions and 6 deletions

View File

@ -355,12 +355,6 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
if (!(wFlags & DDF_UPDATE)) if (!(wFlags & DDF_UPDATE))
{ {
DWORD biSizeImage = lpbi->biSizeImage;
/* biSizeImage may be set to 0 for BI_RGB (uncompressed) bitmaps */
if ((lpbi->biCompression == BI_RGB) && (biSizeImage == 0))
biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
if (lpbi->biCompression) if (lpbi->biCompression)
{ {
DWORD flags = 0; DWORD flags = 0;
@ -374,6 +368,8 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
} }
else else
{ {
/* BI_RGB: lpbi->biSizeImage isn't reliable */
DWORD biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
memcpy(whdd->lpvbits, lpBits, biSizeImage); memcpy(whdd->lpvbits, lpBits, biSizeImage);
} }
} }

View File

@ -105,6 +105,12 @@ static void test_DrawDib_sizeimage(void)
{ 0, 0, 0, "" }, { 0, 0, 0, "" },
{ 0, HEIGHT, 0, "" }, { 0, HEIGHT, 0, "" },
{ WIDTH, 0, 0, "" }, { WIDTH, 0, 0, "" },
/* [8] zero size (to compare [9], [10] ) */
{ WIDTH, HEIGHT/2, 0, "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
/* [9] insufficient size */
{ WIDTH, HEIGHT/2, sizeof(RGBQUAD), "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
/* [10] too much size */
{ WIDTH, HEIGHT/2, WIDTH * HEIGHT * sizeof(RGBQUAD), "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
}; };
HDC hdc; HDC hdc;
DWORD src_dib_size, dst_dib_size; DWORD src_dib_size, dst_dib_size;