Dmitry Timoshkov : ntdll: Perform the offset checks also for a serial device.

Alexandre Julliard julliard at winehq.org
Tue Sep 24 03:22:01 CDT 2013


Module: wine
Branch: master
Commit: 084f4b643cd4cd98bdedbd89dc1e5ccc239cc83b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=084f4b643cd4cd98bdedbd89dc1e5ccc239cc83b

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Thu Sep 19 16:10:09 2013 +0900

ntdll: Perform the offset checks also for a serial device.

---

 dlls/kernel32/tests/comm.c |    9 ---------
 dlls/ntdll/file.c          |    8 ++++++++
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/dlls/kernel32/tests/comm.c b/dlls/kernel32/tests/comm.c
index dfd148c..242b599 100644
--- a/dlls/kernel32/tests/comm.c
+++ b/dlls/kernel32/tests/comm.c
@@ -2153,20 +2153,14 @@ todo_wine
                 SetLastError(0xdeadbeef);
                 ret = ReadFile(hcom, buf, 0, &bytes, NULL);
                 ok(!ret, "ReadFile should fail\n");
-todo_wine
                 ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
                 ok(bytes == 0, "bytes %u\n", bytes);
 
                 iob.Status = -1;
                 iob.Information = -1;
                 status = pNtReadFile(hcom, 0, NULL, NULL, &iob, buf, 0, NULL, NULL);
-todo_wine
                 ok(status == STATUS_INVALID_PARAMETER, "expected STATUS_INVALID_PARAMETER, got %#x\n", status);
-                /* FIXME: Remove once Wine is fixed */
-                if (status == STATUS_PENDING) WaitForSingleObject(hcom, TIMEOUT);
-todo_wine
                 ok(iob.Status == -1, "expected -1, got %#x\n", iob.Status);
-todo_wine
                 ok(iob.Information == -1, "expected -1, got %ld\n", iob.Information);
 
                 for (i = -20; i < 20; i++)
@@ -2187,11 +2181,8 @@ todo_wine
                     }
                     else
                     {
-todo_wine
                         ok(status == STATUS_INVALID_PARAMETER, "%d: expected STATUS_INVALID_PARAMETER, got %#x\n", i, status);
-todo_wine
                         ok(iob.Status == -1, "%d: expected -1, got %#x\n", i, iob.Status);
-todo_wine
                         ok(iob.Information == -1, "%d: expected -1, got %ld\n", i, iob.Information);
                     }
                 }
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 15e8829..75ce35c 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -632,6 +632,14 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
             goto done;
         }
     }
+    else if (type == FD_TYPE_SERIAL)
+    {
+        if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)) && (!offset || offset->QuadPart < 0))
+        {
+            status = STATUS_INVALID_PARAMETER;
+            goto done;
+        }
+    }
 
     for (;;)
     {




More information about the wine-cvs mailing list