[PATCH 2/4] ddraw/tests: Add test for NULL/bad size of surface caps in CreateSurface
Oldřich Jedlička
oldium.pro at seznam.cz
Thu Jul 22 14:13:50 CDT 2010
---
dlls/ddraw/tests/dsurface.c | 157 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 157 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c
index d713cb8..182c633 100644
--- a/dlls/ddraw/tests/dsurface.c
+++ b/dlls/ddraw/tests/dsurface.c
@@ -3455,6 +3455,162 @@ static void BackBufferCreateSurfaceTest(void)
IDirectDraw7_Release(dd7);
}
+static void CreateSurfaceBadCapsSizeTest(void)
+{
+ DDSURFACEDESC ddsd_ok;
+ DDSURFACEDESC ddsd_bad1;
+ DDSURFACEDESC ddsd_bad2;
+ DDSURFACEDESC ddsd_bad3;
+ DDSURFACEDESC ddsd_bad4;
+ DDSURFACEDESC2 ddsd2_ok;
+ DDSURFACEDESC2 ddsd2_bad1;
+ DDSURFACEDESC2 ddsd2_bad2;
+ DDSURFACEDESC2 ddsd2_bad3;
+ DDSURFACEDESC2 ddsd2_bad4;
+ IDirectDrawSurface *surf;
+ IDirectDrawSurface2 *surf2;
+ IDirectDrawSurface4 *surf4;
+ IDirectDrawSurface7 *surf7;
+ HRESULT hr;
+ IDirectDraw *dd;
+ IDirectDraw2 *dd2;
+ IDirectDraw4 *dd4;
+ IDirectDraw7 *dd7;
+ HDC dc;
+
+ const DWORD caps = DDSCAPS_OFFSCREENPLAIN;
+
+ memset(&ddsd_ok, 0, sizeof(ddsd_ok));
+ ddsd_ok.dwSize = sizeof(ddsd_ok);
+ ddsd_ok.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+ ddsd_ok.dwWidth = 64;
+ ddsd_ok.dwHeight = 64;
+ ddsd_ok.ddsCaps.dwCaps = caps;
+ memcpy(&ddsd_bad1, &ddsd_ok, sizeof(ddsd_bad1));
+ ddsd_bad1.dwSize--;
+ memcpy(&ddsd_bad2, &ddsd_ok, sizeof(ddsd_bad2));
+ ddsd_bad2.dwSize++;
+ memcpy(&ddsd_bad3, &ddsd_ok, sizeof(ddsd_bad3));
+ ddsd_bad3.dwSize = 0;
+ memcpy(&ddsd_bad4, &ddsd_ok, sizeof(ddsd_bad4));
+ ddsd_bad4.dwSize = sizeof(DDSURFACEDESC2);
+
+ memset(&ddsd2_ok, 0, sizeof(ddsd2_ok));
+ ddsd2_ok.dwSize = sizeof(ddsd2_ok);
+ ddsd2_ok.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
+ ddsd2_ok.dwWidth = 64;
+ ddsd2_ok.dwHeight = 64;
+ ddsd2_ok.ddsCaps.dwCaps = caps;
+ memcpy(&ddsd2_bad1, &ddsd2_ok, sizeof(ddsd2_bad1));
+ ddsd2_bad1.dwSize--;
+ memcpy(&ddsd2_bad2, &ddsd2_ok, sizeof(ddsd2_bad2));
+ ddsd2_bad2.dwSize++;
+ memcpy(&ddsd2_bad3, &ddsd2_ok, sizeof(ddsd2_bad3));
+ ddsd2_bad3.dwSize = 0;
+ memcpy(&ddsd2_bad4, &ddsd2_ok, sizeof(ddsd2_bad4));
+ ddsd2_bad4.dwSize = sizeof(DDSURFACEDESC);
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw, (void **) &dd);
+ ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed: 0x%08x\n", hr);
+
+ hr = IDirectDraw_CreateSurface(dd, &ddsd_ok, &surf, NULL);
+ ok(SUCCEEDED(hr), "IDirectDraw_CreateSurface failed: 0x%08x\n", hr);
+ IDirectDrawSurface_Release(surf);
+
+ hr = IDirectDraw_CreateSurface(dd, &ddsd_bad1, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw_CreateSurface(dd, &ddsd_bad2, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw_CreateSurface(dd, &ddsd_bad3, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw_CreateSurface(dd, &ddsd_bad4, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw_CreateSurface(dd, NULL, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+
+ IDirectDraw_Release(dd);
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw2, (void **) &dd2);
+ ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed: 0x%08x\n", hr);
+
+ hr = IDirectDraw2_CreateSurface(dd2, &ddsd_ok, &surf, NULL);
+ ok(SUCCEEDED(hr), "IDirectDraw2_CreateSurface failed: 0x%08x\n", hr);
+ IDirectDrawSurface_Release(surf);
+
+ hr = IDirectDraw2_CreateSurface(dd2, &ddsd_bad1, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw2_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw2_CreateSurface(dd2, &ddsd_bad2, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw2_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw2_CreateSurface(dd2, &ddsd_bad3, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw2_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw2_CreateSurface(dd2, &ddsd_bad4, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw2_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw2_CreateSurface(dd2, NULL, &surf, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw2_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+
+ IDirectDraw2_Release(dd2);
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw4, (void **) &dd4);
+ ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed: 0x%08x\n", hr);
+
+ hr = IDirectDraw4_CreateSurface(dd4, &ddsd2_ok, &surf4, NULL);
+ ok(SUCCEEDED(hr), "IDirectDraw4_CreateSurface failed: 0x%08x\n", hr);
+ IDirectDrawSurface4_Release(surf4);
+
+ hr = IDirectDraw4_CreateSurface(dd4, &ddsd2_bad1, &surf4, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw4_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw4_CreateSurface(dd4, &ddsd2_bad2, &surf4, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw4_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw4_CreateSurface(dd4, &ddsd2_bad3, &surf4, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw4_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw4_CreateSurface(dd4, &ddsd2_bad4, &surf4, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw4_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw4_CreateSurface(dd4, NULL, &surf4, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw4_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+
+ IDirectDraw4_Release(dd4);
+
+ hr = IDirectDraw_QueryInterface(lpDD, &IID_IDirectDraw7, (void **) &dd7);
+ ok(SUCCEEDED(hr), "IDirectDraw_QueryInterface failed: 0x%08x\n", hr);
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd2_ok, &surf7, NULL);
+ ok(SUCCEEDED(hr), "IDirectDraw7_CreateSurface failed: 0x%08x\n", hr);
+ IDirectDrawSurface7_Release(surf7);
+
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd2_bad1, &surf7, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd2_bad2, &surf7, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd2_bad3, &surf7, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw7_CreateSurface(dd7, &ddsd2_bad4, &surf7, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+ hr = IDirectDraw7_CreateSurface(dd7, NULL, &surf7, NULL);
+ ok(hr == DDERR_INVALIDPARAMS, "IDirectDraw7_CreateSurface didn't return %x08x, but %x08x\n",
+ DDERR_INVALIDPARAMS, hr);
+
+ IDirectDraw7_Release(dd7);
+}
+
START_TEST(dsurface)
{
HRESULT ret;
@@ -3501,5 +3657,6 @@ START_TEST(dsurface)
GetDCTest();
GetDCFormatTest();
BackBufferCreateSurfaceTest();
+ CreateSurfaceBadCapsSizeTest();
ReleaseDirectDraw();
}
--
1.7.1.1
More information about the wine-patches
mailing list