Vitaliy Margolen : dinput: Add more parameter checking to enum devices.
Alexandre Julliard
julliard at winehq.org
Tue Nov 29 14:20:39 CST 2011
Module: wine
Branch: master
Commit: 310859db675e4b995a56a7578b22b9c3eadb9949
URL: http://source.winehq.org/git/wine.git/?a=commit;h=310859db675e4b995a56a7578b22b9c3eadb9949
Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date: Sat Nov 26 10:30:16 2011 -0700
dinput: Add more parameter checking to enum devices.
---
dlls/dinput/dinput_main.c | 11 ++++++++---
dlls/dinput/tests/dinput.c | 8 +++-----
dlls/dinput8/tests/dinput.c | 8 +++-----
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 7fd30fd..55a04c5 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -208,7 +208,8 @@ static void _dump_EnumDevices_dwFlags(DWORD dwFlags) {
FE(DIEDFL_ATTACHEDONLY),
FE(DIEDFL_FORCEFEEDBACK),
FE(DIEDFL_INCLUDEALIASES),
- FE(DIEDFL_INCLUDEPHANTOMS)
+ FE(DIEDFL_INCLUDEPHANTOMS),
+ FE(DIEDFL_INCLUDEHIDDEN)
#undef FE
};
TRACE(" flags: ");
@@ -356,7 +357,9 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
lpCallback, pvRef, dwFlags);
_dump_EnumDevices_dwFlags(dwFlags);
- if (!lpCallback)
+ if (!lpCallback ||
+ dwFlags & ~(DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK | DIEDFL_INCLUDEALIASES | DIEDFL_INCLUDEPHANTOMS | DIEDFL_INCLUDEHIDDEN) ||
+ dwDevType > 4)
return DIERR_INVALIDPARAM;
if (!This->initialized)
@@ -393,7 +396,9 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
lpCallback, pvRef, dwFlags);
_dump_EnumDevices_dwFlags(dwFlags);
- if (!lpCallback)
+ if (!lpCallback ||
+ dwFlags & ~(DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK | DIEDFL_INCLUDEALIASES | DIEDFL_INCLUDEPHANTOMS | DIEDFL_INCLUDEHIDDEN) ||
+ dwDevType > 4)
return DIERR_INVALIDPARAM;
if (!This->initialized)
diff --git a/dlls/dinput/tests/dinput.c b/dlls/dinput/tests/dinput.c
index 90a8266..3302e7e 100644
--- a/dlls/dinput/tests/dinput.c
+++ b/dlls/dinput/tests/dinput.c
@@ -86,11 +86,11 @@ static void test_preinitialization(void)
{0, NULL, 0, DIERR_INVALIDPARAM},
{0, NULL, ~0u, DIERR_INVALIDPARAM},
{0, dummy_callback, 0, DIERR_NOTINITIALIZED},
- {0, dummy_callback, ~0u, DIERR_INVALIDPARAM, 1},
+ {0, dummy_callback, ~0u, DIERR_INVALIDPARAM},
{0xdeadbeef, NULL, 0, DIERR_INVALIDPARAM},
{0xdeadbeef, NULL, ~0u, DIERR_INVALIDPARAM},
- {0xdeadbeef, dummy_callback, 0, DIERR_INVALIDPARAM, 1},
- {0xdeadbeef, dummy_callback, ~0u, DIERR_INVALIDPARAM, 1},
+ {0xdeadbeef, dummy_callback, 0, DIERR_INVALIDPARAM},
+ {0xdeadbeef, dummy_callback, ~0u, DIERR_INVALIDPARAM},
};
IDirectInputA *pDI;
@@ -434,11 +434,9 @@ static void test_EnumDevices(void)
ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr);
hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, 0);
- todo_wine
ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr);
hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, ~0u);
- todo_wine
ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr);
enum_test.device_count = 0;
diff --git a/dlls/dinput8/tests/dinput.c b/dlls/dinput8/tests/dinput.c
index 8208735..72cd498 100644
--- a/dlls/dinput8/tests/dinput.c
+++ b/dlls/dinput8/tests/dinput.c
@@ -63,11 +63,11 @@ static void test_preinitialization(void)
{0, NULL, 0, DIERR_INVALIDPARAM},
{0, NULL, ~0u, DIERR_INVALIDPARAM},
{0, dummy_callback, 0, DIERR_NOTINITIALIZED},
- {0, dummy_callback, ~0u, DIERR_INVALIDPARAM, 1},
+ {0, dummy_callback, ~0u, DIERR_INVALIDPARAM},
{0xdeadbeef, NULL, 0, DIERR_INVALIDPARAM},
{0xdeadbeef, NULL, ~0u, DIERR_INVALIDPARAM},
- {0xdeadbeef, dummy_callback, 0, DIERR_INVALIDPARAM, 1},
- {0xdeadbeef, dummy_callback, ~0u, DIERR_INVALIDPARAM, 1},
+ {0xdeadbeef, dummy_callback, 0, DIERR_INVALIDPARAM},
+ {0xdeadbeef, dummy_callback, ~0u, DIERR_INVALIDPARAM},
};
IDirectInput8A *pDI;
@@ -404,11 +404,9 @@ static void test_EnumDevices(void)
ok(hr == DIERR_INVALIDPARAM, "IDirectInput8_EnumDevices returned 0x%08x\n", hr);
hr = IDirectInput8_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, 0);
- todo_wine
ok(hr == DIERR_INVALIDPARAM, "IDirectInput8_EnumDevices returned 0x%08x\n", hr);
hr = IDirectInput8_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, ~0u);
- todo_wine
ok(hr == DIERR_INVALIDPARAM, "IDirectInput8_EnumDevices returned 0x%08x\n", hr);
enum_test.device_count = 0;
More information about the wine-cvs
mailing list