Sebastian Lackner : gdi32: Add check for NULL pointer in dibdrv_wglDescribePixelFormat.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 26 11:03:57 CST 2015


Module: wine
Branch: master
Commit: a1790df348caa0318c132717ac572d1b10b76827
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a1790df348caa0318c132717ac572d1b10b76827

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Thu Nov 26 05:09:53 2015 +0100

gdi32: Add check for NULL pointer in dibdrv_wglDescribePixelFormat.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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);




More information about the wine-cvs mailing list