From: marc.bessieres@mykolab.com Subject: gdi32: uninitialized biCompression in GetDIBits(valgrind) Message-Id: <1416860308-3105-1-git-send-email-marc.bessieres@mykolab.com> Date: Mon, 24 Nov 2014 21:18:28 +0100 From: Marc Bessières fix for https://bugs.winehq.org/show_bug.cgi?id=37159 biCompression field was not initialized with the input bitmap while it was used in bitmapinfoheader_from_user_bitmapinfo. So: - move the code calling bitmapinfoheader_from_user_bitmapinfo after we got the bitmap from the input handler. - initialize info->bmiHeader.biCompression --- dlls/gdi32/dib.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 708a9a8..99b1a0e 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c @@ -1212,16 +1212,6 @@ INT WINAPI GetDIBits( struct bitblt_coords src, dst; BOOL empty_rect = FALSE; - /* Since info may be a BITMAPCOREINFO or any of the larger BITMAPINFO structures, we'll use our - own copy and transfer the colour info back at the end */ - if (!bitmapinfoheader_from_user_bitmapinfo( &dst_info->bmiHeader, &info->bmiHeader )) return 0; - if (coloruse > DIB_PAL_COLORS) return 0; - if (bits && - (dst_info->bmiHeader.biCompression == BI_JPEG || dst_info->bmiHeader.biCompression == BI_PNG)) - return 0; - dst_info->bmiHeader.biClrUsed = 0; - dst_info->bmiHeader.biClrImportant = 0; - if (!(dc = get_dc_ptr( hdc ))) { SetLastError( ERROR_INVALID_PARAMETER ); @@ -1234,6 +1224,17 @@ INT WINAPI GetDIBits( return 0; } + info->bmiHeader.biCompression = bmp->dib.dsBmih.biCompression; + /* Since info may be a BITMAPCOREINFO or any of the larger BITMAPINFO structures, we'll use our + own copy and transfer the colour info back at the end */ + if (!bitmapinfoheader_from_user_bitmapinfo( &dst_info->bmiHeader, &info->bmiHeader )) return 0; + if (coloruse > DIB_PAL_COLORS) return 0; + if (bits && + (dst_info->bmiHeader.biCompression == BI_JPEG || dst_info->bmiHeader.biCompression == BI_PNG)) + return 0; + dst_info->bmiHeader.biClrUsed = 0; + dst_info->bmiHeader.biClrImportant = 0; + src.visrect.left = 0; src.visrect.top = 0; src.visrect.right = bmp->dib.dsBm.bmWidth; -- 2.1.2