From: Sebastian Lackner Subject: gdi32: Add check for NULL pointer in dibdrv_wglDescribePixelFormat. Message-Id: <56568611.5000008@fds-team.de> Date: Thu, 26 Nov 2015 05:09:53 +0100 Signed-off-by: Sebastian Lackner --- For bug https://bugs.winehq.org/show_bug.cgi?id=6176 Testrun: https://newtestbot.winehq.org/JobDetails.pl?Key=18558 dlls/gdi32/dibdrv/opengl.c | 3 ++- dlls/gdi32/tests/dc.c | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/dlls/gdi32/dibdrv/opengl.c b/dlls/gdi32/dibdrv/opengl.c index a25da208..4133116 100644 --- a/dlls/gdi32/dibdrv/opengl.c +++ b/dlls/gdi32/dibdrv/opengl.c @@ -149,7 +149,8 @@ static int dibdrv_wglDescribePixelFormat( HDC hdc, int fmt, UINT size, PIXELFORM { int ret = sizeof(pixel_formats) / sizeof(pixel_formats[0]); - if (fmt <= 0 || fmt > ret) return ret; + if (!descr) return ret; + if (fmt <= 0 || fmt > ret) return 0; if (size < sizeof(*descr)) return 0; memset( descr, 0, sizeof(*descr) ); diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c index d215d9c..cb42219 100644 --- a/dlls/gdi32/tests/dc.c +++ b/dlls/gdi32/tests/dc.c @@ -630,11 +630,13 @@ static void test_CreateCompatibleDC(void) static void test_DC_bitmap(void) { + PIXELFORMATDESCRIPTOR descr; HDC hdc, hdcmem; DWORD bits[64]; HBITMAP hbmp, oldhbmp; COLORREF col; int i, bitspixel; + int ret, ret2; /* fill bitmap data with b&w pattern */ for( i = 0; i < 64; i++) bits[i] = i & 1 ? 0 : 0xffffff; @@ -645,7 +647,31 @@ static void test_DC_bitmap(void) /* create a memory dc */ hdcmem = CreateCompatibleDC( hdc); ok( hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem); - /* tests */ + + /* test DescribePixelFormat with descr == NULL */ + ret2 = DescribePixelFormat(hdcmem, 0, sizeof(descr), NULL); + ok(ret2 > 0, "expected ret2 > 0, got %d\n", ret2); + ret = DescribePixelFormat(hdcmem, 1, sizeof(descr), NULL); + ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret); + ret = DescribePixelFormat(hdcmem, 0x10000, sizeof(descr), NULL); + ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret); + + /* test DescribePixelFormat with descr != NULL */ + memset(&descr, 0, sizeof(descr)); + ret = DescribePixelFormat(hdcmem, 0, sizeof(descr), &descr); + ok(ret == 0, "expected ret == 0, got %d\n", ret); + ok(descr.nSize == 0, "expected descr.nSize == 0, got %d\n", descr.nSize); + + memset(&descr, 0, sizeof(descr)); + ret = DescribePixelFormat(hdcmem, 1, sizeof(descr), &descr); + ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret); + ok(descr.nSize == sizeof(descr), "expected desc.nSize == sizeof(descr), got %d\n", descr.nSize); + + memset(&descr, 0, sizeof(descr)); + ret = DescribePixelFormat(hdcmem, 0x10000, sizeof(descr), &descr); + ok(ret == 0, "expected ret == 0, got %d\n", ret); + ok(descr.nSize == 0, "expected descr.nSize == 0, got %d\n", descr.nSize); + /* test monochrome bitmap: should always work */ hbmp = CreateBitmap(32, 32, 1, 1, bits); ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp); -- 2.6.2