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