From 310859db675e4b995a56a7578b22b9c3eadb9949 Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Sat, 26 Nov 2011 10:30:16 -0700 Subject: [PATCH] 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 7fd30fd8b1d..55a04c57320 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 90a8266ecb6..3302e7e304c 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 820873519a8..72cd4980764 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; -- 2.11.4.GIT