Hi Jinoh, Thanks for looking at it. The patch seems to do the right thing, but some aspects are not clear to me. On 10/3/21 9:04 PM, Jinoh Kang wrote:
+static UINT get_user_dib_image_size( const BITMAPINFO *info ) +{ + UINT size; + + if (info->bmiHeader.biCompression != BI_RGB) + { + /* compressed image -- always trust biSizeImage */ + return info->bmiHeader.biSizeImage; + } + + size = get_dib_image_size( info ); + + /* biSizeImage can be zero if biCompression == BI_RGB */ + if (info->bmiHeader.biSizeImage) + { + if (info->bmiHeader.biSizeImage < size) + TRACE( "biSizeImage (%u) smaller than calculated size (%u)", + info->bmiHeader.biSizeImage, + size ); + else + size = info->bmiHeader.biSizeImage; /* FIXME */ + } + + return size; +}
Looking at bitmapinfoheader_from_user_bitmapinfo, we should probably ignore biSizeImage for BI_RGB and BI_BITFIELDS. There is also a question about what we should use for biSizeImage recorded as part of BITMAPINFOHEADER. Maybe we should just copy bitmapinfoheader_from_user_bitmapinfo and use it here. Ideally, we'd have a test for that in tests/metafile.c. Thanks, Jacek