Henri Verbeet : ddraw: Return DDERR_INVALIDPARAMS for 0 width / height surface creation.
Alexandre Julliard
julliard at winehq.org
Thu Nov 18 11:09:30 CST 2010
Module: wine
Branch: master
Commit: 63316d096702393691236b29bc3bf7f8e414a49c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=63316d096702393691236b29bc3bf7f8e414a49c
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Nov 18 12:21:42 2010 +0100
ddraw: Return DDERR_INVALIDPARAMS for 0 width / height surface creation.
---
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);
More information about the wine-cvs
mailing list