Module: wine Branch: master Commit: cf6d56a43a18ac9ee9d3a56027cc6d3a88aaed05 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf6d56a43a18ac9ee9d3a56027...
Author: Andrew Nguyen anguyen@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);