Dmitry Timoshkov : ntdll: NtWriteFile should fail for overlapped IO on files if offset is negative.

Alexandre Julliard julliard at winehq.org
Fri Sep 13 10:15:50 CDT 2013


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

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Sep 13 15:45:37 2013 +0900

ntdll: NtWriteFile should fail for overlapped IO on files if offset is negative.

---

 dlls/ntdll/file.c       |    2 +-
 dlls/ntdll/tests/file.c |   14 --------------
 2 files changed, 1 insertions(+), 15 deletions(-)

diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index f7f80e6..dd67b3d 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -961,7 +961,7 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
 
     if (type == FD_TYPE_FILE)
     {
-        if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)) && !offset)
+        if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)) && (!offset || offset->QuadPart < 0))
         {
             status = STATUS_INVALID_PARAMETER;
             goto done;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 0b2a764..120fdac 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2198,9 +2198,6 @@ todo_wine
 
     for (i = -20; i < -1; i++)
     {
-        /* FIXME: Remove once Wine is fixed */
-        if (i == -2) continue;
-
         iob.Status = -1;
         iob.Information = -1;
         offset.QuadPart = (LONGLONG)i;
@@ -2212,17 +2209,6 @@ todo_wine
 
     iob.Status = -1;
     iob.Information = -1;
-    offset.QuadPart = (LONGLONG)-2 /* FILE_USE_FILE_POINTER_POSITION */;
-    status = pNtWriteFile(hfile, 0, NULL, NULL, &iob, contents, sizeof(contents), &offset, NULL);
-todo_wine
-    ok(status == STATUS_INVALID_PARAMETER, "expected STATUS_INVALID_PARAMETER, got %#x\n", status);
-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);
-
-    iob.Status = -1;
-    iob.Information = -1;
     offset.QuadPart = 0;
     status = pNtWriteFile(hfile, 0, NULL, NULL, &iob, contents, sizeof(contents), &offset, NULL);
 todo_wine




More information about the wine-cvs mailing list