Module: wine Branch: master Commit: 2ca58402e71b29aa06b4ef94b70ade8124ddd883 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2ca58402e71b29aa06b4ef94b7...
Author: Juan Lang juan.lang@gmail.com Date: Mon Mar 7 15:55:35 2011 -0800
kernel32: Add some parameter checking to FileTimeToDosDateTime.
---
dlls/kernel32/tests/time.c | 38 ++++++++++++++++++++++++++++++++++++++ dlls/kernel32/time.c | 11 ++++++++++- 2 files changed, 48 insertions(+), 1 deletions(-)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index 36dcbdf..b0d8a46 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -600,6 +600,43 @@ static void test_TzSpecificLocalTimeToSystemTime(void) } }
+static void test_FileTimeToDosDateTime(void) +{ + FILETIME ft = { 0 }; + WORD fatdate, fattime; + BOOL ret; + + if (0) + { + /* Crashes */ + FileTimeToDosDateTime(NULL, NULL, NULL); + } + /* Parameter checking */ + SetLastError(0xdeadbeef); + ret = FileTimeToDosDateTime(&ft, NULL, NULL); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = FileTimeToDosDateTime(&ft, &fatdate, NULL); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = FileTimeToDosDateTime(&ft, NULL, &fattime); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = FileTimeToDosDateTime(&ft, &fatdate, &fattime); + ok(!ret, "expected failure\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); +} + START_TEST(time) { HMODULE hKernel = GetModuleHandle("kernel32"); @@ -612,4 +649,5 @@ START_TEST(time) test_FileTimeToSystemTime(); test_FileTimeToLocalFileTime(); test_TzSpecificLocalTimeToSystemTime(); + test_FileTimeToDosDateTime(); } diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c index 2b7bd6c..5dff796 100644 --- a/dlls/kernel32/time.c +++ b/dlls/kernel32/time.c @@ -1000,9 +1000,18 @@ BOOL WINAPI FileTimeToDosDateTime( const FILETIME *ft, LPWORD fatdate, time_t unixtime; struct tm* tm;
+ if (!fatdate || !fattime) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } li.u.LowPart = ft->dwLowDateTime; li.u.HighPart = ft->dwHighDateTime; - RtlTimeToSecondsSince1970( &li, &t ); + if (!RtlTimeToSecondsSince1970( &li, &t )) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } unixtime = t; tm = gmtime( &unixtime ); if (fattime)