[PATCH 5/5] ddraw/tests: Show that a failing SetPrivateData call does not clear the old contents.
Stefan Dösinger
stefan at codeweavers.com
Mon Mar 10 17:43:11 CDT 2014
In some failure modes at least. Don't care about an apparent bug wrt
IUnknown * size validation until we find an app that needs it.
---
dlls/ddraw/tests/ddraw4.c | 17 +++++++++++++++++
dlls/ddraw/tests/ddraw7.c | 17 +++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 9dafe95..0320f65 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -6085,6 +6085,23 @@ static void test_private_data(void)
sizeof(ddraw) * 2, DDSPD_IUNKNOWNPOINTER);
ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ /* Note that with a size != 0 and size != sizeof(IUnknown *) and
+ * DDSPD_IUNKNOWNPOINTER set SetPrivateData in ddraw4 and ddraw7
+ * erases the old content and returns an error. This behavior has
+ * been fixed in d3d8 and d3d9. Unless an application is found
+ * that depends on this we don't care about this behavior. */
+ hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+ sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
+ ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr);
+ hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+ 0, DDSPD_IUNKNOWNPOINTER);
+ ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ size = sizeof(ptr);
+ hr = IDirectDrawSurface4_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size);
+ ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr);
+ hr = IDirectDrawSurface4_FreePrivateData(surface, &IID_IDirect3D);
+ ok(SUCCEEDED(hr), "Failed to free private data, hr %#x.\n", hr);
+
refcount = get_refcount((IUnknown *)ddraw);
hr = IDirectDrawSurface4_SetPrivateData(surface, &IID_IDirect3D, ddraw,
sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 855e3b2..9f25c6c 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -5940,6 +5940,23 @@ static void test_private_data(void)
sizeof(ddraw) * 2, DDSPD_IUNKNOWNPOINTER);
ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ /* Note that with a size != 0 and size != sizeof(IUnknown *) and
+ * DDSPD_IUNKNOWNPOINTER set SetPrivateData in ddraw4 and ddraw7
+ * erases the old content and returns an error. This behavior has
+ * been fixed in d3d8 and d3d9. Unless an application is found
+ * that depends on this we don't care about this behavior. */
+ hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+ sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
+ ok(SUCCEEDED(hr), "Failed to set private data, hr %#x.\n", hr);
+ hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
+ 0, DDSPD_IUNKNOWNPOINTER);
+ ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+ size = sizeof(ptr);
+ hr = IDirectDrawSurface7_GetPrivateData(surface, &IID_IDirect3D, &ptr, &size);
+ ok(SUCCEEDED(hr), "Failed to get private data, hr %#x.\n", hr);
+ hr = IDirectDrawSurface7_FreePrivateData(surface, &IID_IDirect3D);
+ ok(SUCCEEDED(hr), "Failed to free private data, hr %#x.\n", hr);
+
refcount = get_refcount((IUnknown *)ddraw);
hr = IDirectDrawSurface7_SetPrivateData(surface, &IID_IDirect3D, ddraw,
sizeof(ddraw), DDSPD_IUNKNOWNPOINTER);
--
1.8.3.2
More information about the wine-patches
mailing list