Module: wine Branch: master Commit: 63316d096702393691236b29bc3bf7f8e414a49c URL: http://source.winehq.org/git/wine.git/?a=commit;h=63316d096702393691236b29bc...
Author: Henri Verbeet hverbeet@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);