Andrew Nguyen : ddraw: Add a NULL callback pointer check in the EnumDevices implementations.

Alexandre Julliard julliard at winehq.org
Tue May 31 13:08:19 CDT 2011


Module: wine
Branch: master
Commit: cf6d56a43a18ac9ee9d3a56027cc6d3a88aaed05
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cf6d56a43a18ac9ee9d3a56027cc6d3a88aaed05

Author: Andrew Nguyen <anguyen at codeweavers.com>
Date:   Tue May 31 05:49:57 2011 -0500

ddraw: Add a NULL callback pointer check in the EnumDevices implementations.

---

 dlls/ddraw/ddraw.c     |    6 ++++++
 dlls/ddraw/tests/d3d.c |   12 ++++++++++++
 2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index cac05d3..c2101b9 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4234,6 +4234,9 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
 
     TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
 
+    if (!callback)
+        return DDERR_INVALIDPARAMS;
+
     EnterCriticalSection(&ddraw_cs);
 
     hr = IDirect3DImpl_GetCaps(This->wineD3D, &device_desc1, &device_desc7);
@@ -4291,6 +4294,9 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
 
     TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
 
+    if (!callback)
+        return DDERR_INVALIDPARAMS;
+
     EnterCriticalSection(&ddraw_cs);
 
     hr = IDirect3DImpl_GetCaps(This->wineD3D, &device_desc1, &device_desc7);
diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index 00c6d2a..4dc2a20 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -865,8 +865,12 @@ static HRESULT WINAPI enumDevicesCallbackTest7(LPSTR DeviceDescription, LPSTR De
     IDirect3D7_EnumDevices. */
 static void D3D7EnumTest(void)
 {
+    HRESULT hr;
     D3D7ETest d3d7et;
 
+    hr = IDirect3D7_EnumDevices(lpD3D, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "IDirect3D7_EnumDevices returned 0x%08x\n", hr);
+
     memset(&d3d7et, 0, sizeof(d3d7et));
     IDirect3D7_EnumDevices(lpD3D, enumDevicesCallbackTest7, &d3d7et);
 
@@ -892,6 +896,10 @@ static void CapsTest(void)
     ok(hr == DD_OK, "Cannot create a DirectDraw 1 interface, hr = %08x\n", hr);
     hr = IDirectDraw_QueryInterface(dd1, &IID_IDirect3D3, (void **) &d3d3);
     ok(hr == D3D_OK, "IDirectDraw_QueryInterface returned %08x\n", hr);
+
+    hr = IDirect3D3_EnumDevices(d3d3, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "IDirect3D3_EnumDevices returned 0x%08x\n", hr);
+
     ver = 3;
     IDirect3D3_EnumDevices(d3d3, enumDevicesCallback, &ver);
 
@@ -902,6 +910,10 @@ static void CapsTest(void)
     ok(hr == DD_OK, "Cannot create a DirectDraw 1 interface, hr = %08x\n", hr);
     hr = IDirectDraw_QueryInterface(dd1, &IID_IDirect3D2, (void **) &d3d2);
     ok(hr == D3D_OK, "IDirectDraw_QueryInterface returned %08x\n", hr);
+
+    hr = IDirect3D2_EnumDevices(d3d2, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "IDirect3D2_EnumDevices returned 0x%08x\n", hr);
+
     ver = 2;
     IDirect3D2_EnumDevices(d3d2, enumDevicesCallback, &ver);
 




More information about the wine-cvs mailing list