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