Commit ce5763b8 authored by Wolfram Sang's avatar Wolfram Sang Committed by Alexandre Julliard

user32: Make DIB_GetBitmapInfo checks stricter.

parent 25923d2f
...@@ -372,7 +372,9 @@ static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, ...@@ -372,7 +372,9 @@ static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
*compr = 0; *compr = 0;
return 0; return 0;
} }
else if (header->biSize >= sizeof(BITMAPINFOHEADER)) else if (header->biSize == sizeof(BITMAPINFOHEADER) ||
header->biSize == sizeof(BITMAPV4HEADER) ||
header->biSize == sizeof(BITMAPV5HEADER))
{ {
*width = header->biWidth; *width = header->biWidth;
*height = header->biHeight; *height = header->biHeight;
...@@ -380,7 +382,7 @@ static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, ...@@ -380,7 +382,7 @@ static int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
*compr = header->biCompression; *compr = header->biCompression;
return 1; return 1;
} }
ERR("(%d): unknown/wrong size for header\n", header->biSize ); WARN("unknown/wrong size (%u) for header\n", header->biSize);
return -1; return -1;
} }
......
...@@ -765,6 +765,24 @@ static unsigned char gif4pixel[42] = { ...@@ -765,6 +765,24 @@ static unsigned char gif4pixel[42] = {
0x02,0x00,0x00,0x02,0x03,0x14,0x16,0x05,0x00,0x3b 0x02,0x00,0x00,0x02,0x03,0x14,0x16,0x05,0x00,0x3b
}; };
static const DWORD biSize_tests[] = {
0,
sizeof(BITMAPCOREHEADER) - 1,
sizeof(BITMAPCOREHEADER) + 1,
sizeof(BITMAPINFOHEADER) - 1,
sizeof(BITMAPINFOHEADER) + 1,
sizeof(BITMAPV4HEADER) - 1,
sizeof(BITMAPV4HEADER) + 1,
sizeof(BITMAPV5HEADER) - 1,
sizeof(BITMAPV5HEADER) + 1,
(sizeof(BITMAPCOREHEADER) + sizeof(BITMAPINFOHEADER)) / 2,
(sizeof(BITMAPV4HEADER) + sizeof(BITMAPV5HEADER)) / 2,
0xdeadbeef,
0xffffffff
};
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
static void test_LoadImageBitmap(const char * test_desc, HBITMAP hbm) static void test_LoadImageBitmap(const char * test_desc, HBITMAP hbm)
{ {
BITMAP bm; BITMAP bm;
...@@ -856,6 +874,7 @@ static void test_LoadImage(void) ...@@ -856,6 +874,7 @@ static void test_LoadImage(void)
CURSORICONFILEDIRENTRY *icon_entry; CURSORICONFILEDIRENTRY *icon_entry;
BITMAPINFOHEADER *icon_header, *bitmap_header; BITMAPINFOHEADER *icon_header, *bitmap_header;
ICONINFO icon_info; ICONINFO icon_info;
int i;
#define ICON_WIDTH 32 #define ICON_WIDTH 32
#define ICON_HEIGHT 32 #define ICON_HEIGHT 32
...@@ -992,8 +1011,16 @@ static void test_LoadImage(void) ...@@ -992,8 +1011,16 @@ static void test_LoadImage(void)
bitmap_header->biWidth = 65536; bitmap_header->biWidth = 65536;
test_LoadImageFile("BMP (too wide)", bmpimage, sizeof(bmpimage), "bmp", 0); test_LoadImageFile("BMP (too wide)", bmpimage, sizeof(bmpimage), "bmp", 0);
bitmap_header->biWidth = 1; bitmap_header->biWidth = 1;
for (i = 0; i < ARRAY_SIZE(biSize_tests); i++) {
bitmap_header->biSize = biSize_tests[i];
test_LoadImageFile("BMP (broken biSize)", bmpimage, sizeof(bmpimage), "bmp", 0);
}
bitmap_header->biSize = sizeof(BITMAPINFOHEADER);
} }
#undef ARRAY_SIZE
static void test_CreateIconFromResource(void) static void test_CreateIconFromResource(void)
{ {
HANDLE handle; HANDLE handle;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment