dinput: Added a check for NULL callback in EnumDevices.
Lucas Fialho Zawacki
lfzawacki at gmail.com
Fri Jun 3 17:19:37 CDT 2011
In the absence of this check apps passing a NULL pointer as callback to
EnumDevices segfault under Wine.
---
dlls/dinput/dinput_main.c | 6 ++++++
dlls/dinput/tests/device.c | 2 ++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index d3727bc..3551f15 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -271,6 +271,9 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
lpCallback, pvRef, dwFlags);
_dump_EnumDevices_dwFlags(dwFlags);
+ if (!lpCallback)
+ return DIERR_INVALIDPARAM;
+
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
if (!dinput_devices[i]->enum_deviceA) continue;
for (j = 0, r = -1; r != 0; j++) {
@@ -302,6 +305,9 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
lpCallback, pvRef, dwFlags);
_dump_EnumDevices_dwFlags(dwFlags);
+ if (!lpCallback)
+ return DIERR_INVALIDPARAM;
+
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
if (!dinput_devices[i]->enum_deviceW) continue;
for (j = 0, r = -1; r != 0; j++) {
diff --git a/dlls/dinput/tests/device.c b/dlls/dinput/tests/device.c
index a8ff19b..cb59890 100644
--- a/dlls/dinput/tests/device.c
+++ b/dlls/dinput/tests/device.c
@@ -187,6 +187,8 @@ static void device_tests(void)
hr = IDirectInput_EnumDevices(pDI, 0, enum_devices, &data, DIEDFL_ALLDEVICES);
ok(SUCCEEDED(hr), "IDirectInput_EnumDevices() failed: %08x\n", hr);
+ hr = IDirectInput_EnumDevices(pDI, 0, NULL, &data, DIEDFL_ALLDEVICES);
+ ok(FAILED(hr), "IDirectInput_EnumDevices() succeded with NULL callback: %08x\n", hr);
/* If GetDeviceStatus returns DI_OK the device must exist */
hr = IDirectInput_GetDeviceStatus(pDI, &GUID_Joystick);
--
1.7.0.4
More information about the wine-patches
mailing list