Rémi Bernon : hidclass.sys: Drop reports when length doesn't match their declaration.
Module: wine Branch: master Commit: 9411ecf6707bd40eddca4e21f43e1b09282db7a0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9411ecf6707bd40eddca4e21f... Author: Rémi Bernon <rbernon(a)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(a)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(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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 ); }
participants (1)
-
Alexandre Julliard