Rémi Bernon : hidclass.sys: Drop reports when length doesn't match their declaration.

Alexandre Julliard julliard at winehq.org
Mon Oct 4 15:42:18 CDT 2021


Module: wine
Branch: master
Commit: 9411ecf6707bd40eddca4e21f43e1b09282db7a0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9411ecf6707bd40eddca4e21f43e1b09282db7a0

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Mon Oct  4 10:18:14 2021 +0200

hidclass.sys: Drop reports when length doesn't match their declaration.

Based on a patch from Ivo Ivanov <logos128 at gmail.com>.

Instead of using the descriptor input report length, which is the
maximum length of all input reports.

Tests show that the reports should be dropped, in non-polled mode, when
their length is invalid, but we were dropping too many of them.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51828
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/device.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index 6530efcdb84..e4592c4d242 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -349,7 +349,8 @@ static DWORD CALLBACK hid_device_thread(void *args)
             packet->reportBuffer = buffer;
             packet->reportBufferLen = io.Information;
 
-            if (polled || io.Information == desc->InputLength)
+            report = find_report_with_type_and_id( ext, HidP_Input, buffer[0], FALSE );
+            if (polled || (report && report->InputLength == io.Information))
                 hid_device_queue_input( device, packet );
         }
 




More information about the wine-cvs mailing list