Module: wine Branch: master Commit: a2c2b602923b62b8e67281e8f7c8aa08a11185a6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a2c2b602923b62b8e67281e8f7...
Author: Jeremy White jwhite@codeweavers.com Date: Fri Jul 13 11:32:10 2007 -0500
gdi32: Added a test for the case where lpvBits in GetDIBits is NULL and the bitcount is 0.
---
dlls/gdi32/tests/bitmap.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c index 019bb35..566545d 100644 --- a/dlls/gdi32/tests/bitmap.c +++ b/dlls/gdi32/tests/bitmap.c @@ -1791,6 +1791,46 @@ static void test_bitmapinfoheadersize(void) ReleaseDC(0, hdc); }
+static void test_get16dibits(void) +{ + BYTE bits[4 * (16 / sizeof(BYTE))]; + HBITMAP hbmp; + HDC screen_dc = GetDC(NULL); + int ret; + BITMAPINFO * info; + int info_len = sizeof(BITMAPINFOHEADER) + 1024; + BYTE *p; + int overwritten_bytes = 0; + + memset(bits, 0, sizeof(bits)); + hbmp = CreateBitmap(2, 2, 1, 16, bits); + ok(hbmp != NULL, "CreateBitmap failed\n"); + + info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, info_len); + assert(info); + + memset(info, '!', info_len); + memset(info, 0, sizeof(info->bmiHeader)); + + info->bmiHeader.biSize = sizeof(info->bmiHeader); + info->bmiHeader.biWidth = 2; + info->bmiHeader.biHeight = 2; + info->bmiHeader.biPlanes = 1; + info->bmiHeader.biCompression = BI_RGB; + + ret = GetDIBits(screen_dc, hbmp, 0, 0, NULL, info, 0); + ok(ret != 0, "GetDIBits failed\n"); + + for (p = ((BYTE *) info) + sizeof(info->bmiHeader); (p - ((BYTE *) info)) < info_len; p++) + if (*p != '!') + overwritten_bytes++; + ok(overwritten_bytes == 0, "GetDIBits wrote past the buffer given\n"); + + DeleteObject(hbmp); + ReleaseDC(NULL, screen_dc); +} + + START_TEST(bitmap) { is_win9x = GetWindowLongPtrW(GetDesktopWindow(), GWLP_WNDPROC) == 0; @@ -1809,4 +1849,5 @@ START_TEST(bitmap) test_select_object(); test_CreateBitmap(); test_bitmapinfoheadersize(); + test_get16dibits(); }