From af089289b32dbeec797f810938bca4adc8f717db Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Fri, 2 May 2014 22:14:24 +0900 Subject: [PATCH] msvfw32: Fix uncompressed bitmap size handling in DrawDibDraw. --- dlls/msvfw32/drawdib.c | 8 ++------ dlls/msvfw32/tests/drawdib.c | 6 ++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dlls/msvfw32/drawdib.c b/dlls/msvfw32/drawdib.c index 2916126fb3d..c4e5c40d3f7 100644 --- a/dlls/msvfw32/drawdib.c +++ b/dlls/msvfw32/drawdib.c @@ -355,12 +355,6 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, 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) { DWORD flags = 0; @@ -374,6 +368,8 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, } else { + /* BI_RGB: lpbi->biSizeImage isn't reliable */ + DWORD biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight; memcpy(whdd->lpvbits, lpBits, biSizeImage); } } diff --git a/dlls/msvfw32/tests/drawdib.c b/dlls/msvfw32/tests/drawdib.c index 24d86317acb..0a59d826213 100644 --- a/dlls/msvfw32/tests/drawdib.c +++ b/dlls/msvfw32/tests/drawdib.c @@ -105,6 +105,12 @@ static void test_DrawDib_sizeimage(void) { 0, 0, 0, "" }, { 0, HEIGHT, 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; DWORD src_dib_size, dst_dib_size;