Module: wine Branch: master Commit: 2ffd28cff7012c15ed3e181120fcb96148d0398d URL: http://source.winehq.org/git/wine.git/?a=commit;h=2ffd28cff7012c15ed3e181120...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Wed Sep 25 13:03:25 2013 +0900
ntdll: Perform the offset checks in NtWriteFile also for a serial device.
---
dlls/kernel32/tests/comm.c | 10 ---------- dlls/ntdll/file.c | 9 +++++++++ 2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/dlls/kernel32/tests/comm.c b/dlls/kernel32/tests/comm.c index 242b599..4e7fee5 100644 --- a/dlls/kernel32/tests/comm.c +++ b/dlls/kernel32/tests/comm.c @@ -830,9 +830,7 @@ static void test_waittxempty(void)
SetLastError(0xdeadbeef); res = WriteFile(hcom, tbuf, sizeof(tbuf), &bytes, NULL); -todo_wine ok(!res, "WriteFile on an overlapped handle without ovl structure should fail\n"); -todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
S(U(ovl_write)).Offset = 0; @@ -2057,20 +2055,15 @@ static void test_read_write(void) bytes = 0xdeadbeef; SetLastError(0xdeadbeef); ret = WriteFile(hcom, atz, 0, &bytes, NULL); -todo_wine ok(!ret, "WriteFile 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 = pNtWriteFile(hcom, 0, NULL, NULL, &iob, atz, 0, NULL, 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);
for (i = -20; i < 20; i++) @@ -2087,11 +2080,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 75ce35c..1cc8f87 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -1016,6 +1016,15 @@ NTSTATUS WINAPI NtWriteFile(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 && offset->QuadPart != (LONGLONG)-1 /* FILE_WRITE_TO_END_OF_FILE */))) + { + status = STATUS_INVALID_PARAMETER; + goto done; + } + }
for (;;) {