Rémi Bernon : hidclass.sys: Return STATUS_INVALID_USER_BUFFER when appropriate.

Alexandre Julliard julliard at winehq.org
Wed Aug 4 16:41:38 CDT 2021


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

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Tue Aug  3 18:55:19 2021 +0200

hidclass.sys: Return STATUS_INVALID_USER_BUFFER when appropriate.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/device.c         | 7 ++++++-
 dlls/ntoskrnl.exe/tests/ntoskrnl.c | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index 6ae4a0ce6aa..4d34c0d53d9 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -499,7 +499,12 @@ NTSTATUS WINAPI pdo_ioctl(DEVICE_OBJECT *device, IRP *irp)
             BYTE *buffer = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);
             ULONG out_length;
 
-            if (!irpsp->Parameters.DeviceIoControl.OutputBufferLength || !buffer)
+            if (!buffer)
+            {
+                irp->IoStatus.Status = STATUS_INVALID_USER_BUFFER;
+                break;
+            }
+            if (!irpsp->Parameters.DeviceIoControl.OutputBufferLength)
             {
                 irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
                 break;
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index 892e839fa56..3c883edb7c8 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -2441,7 +2441,7 @@ static void test_hidp(HANDLE file, HANDLE async_file, int report_id, BOOL polled
     SetLastError(0xdeadbeef);
     ret = HidD_GetInputReport(file, report, 0);
     ok(!ret, "HidD_GetInputReport succeeded\n");
-    todo_wine ok(GetLastError() == ERROR_INVALID_USER_BUFFER, "HidD_GetInputReport returned error %u\n", GetLastError());
+    ok(GetLastError() == ERROR_INVALID_USER_BUFFER, "HidD_GetInputReport returned error %u\n", GetLastError());
 
     SetLastError(0xdeadbeef);
     ret = HidD_GetInputReport(file, report, caps.InputReportByteLength - 1);




More information about the wine-cvs mailing list