[PATCH 4/4] ddraw: Return DDERR_INVALIDPARAMS for 0 width / height surface creation.

Henri Verbeet hverbeet at codeweavers.com
Thu Nov 18 05:21:42 CST 2010


---
 dlls/ddraw/ddraw.c          |    6 ++++++
 dlls/ddraw/tests/dsurface.c |   24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index b9ff201..c0354ce 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3069,6 +3069,12 @@ static HRESULT CreateSurface(IDirectDraw7 *iface,
         desc2.dwHeight = Mode.Height;
     }
 
+    if (!desc2.dwWidth || !desc2.dwHeight)
+    {
+        LeaveCriticalSection(&ddraw_cs);
+        return DDERR_INVALIDPARAMS;
+    }
+
     /* Mipmap count fixes */
     if(desc2.ddsCaps.dwCaps & DDSCAPS_MIPMAP)
     {
diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c
index ee221ce..8bc849d 100644
--- a/dlls/ddraw/tests/dsurface.c
+++ b/dlls/ddraw/tests/dsurface.c
@@ -2391,6 +2391,30 @@ static void SizeTest(void)
         dsurface = NULL;
     }
 
+    /* Test 0 height. */
+    memset(&desc, 0, sizeof(desc));
+    desc.dwSize = sizeof(desc);
+    desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+    desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+    desc.dwWidth = 1;
+    desc.dwHeight = 0;
+    ret = IDirectDraw_CreateSurface(lpDD, &desc, &dsurface, NULL);
+    ok(ret == DDERR_INVALIDPARAMS, "Creating a 0 height surface returned %#x, expected DDERR_INVALIDPARAMS.\n", ret);
+    if (SUCCEEDED(ret)) IDirectDrawSurface_Release(dsurface);
+    dsurface = NULL;
+
+    /* Test 0 width. */
+    memset(&desc, 0, sizeof(desc));
+    desc.dwSize = sizeof(desc);
+    desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+    desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+    desc.dwWidth = 0;
+    desc.dwHeight = 1;
+    ret = IDirectDraw_CreateSurface(lpDD, &desc, &dsurface, NULL);
+    ok(ret == DDERR_INVALIDPARAMS, "Creating a 0 width surface returned %#x, expected DDERR_INVALIDPARAMS.\n", ret);
+    if (SUCCEEDED(ret)) IDirectDrawSurface_Release(dsurface);
+    dsurface = NULL;
+
     /* Sanity check */
     ZeroMemory(&desc, sizeof(desc));
     desc.dwSize = sizeof(desc);
-- 
1.7.2.2




More information about the wine-patches mailing list