Module: wine Branch: master Commit: a5d14fa980542fcf26aeb5fa41e098b042f7b29d URL: https://source.winehq.org/git/wine.git/?a=commit;h=a5d14fa980542fcf26aeb5fa4...
Author: Daniel Lehman dlehman@esri.com Date: Tue Mar 15 10:15:13 2022 -0700
kernelbase: Check for invalid value in FileTimeToSystemTime.
Signed-off-by: Daniel Lehman dlehman@esri.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/tests/time.c | 2 -- dlls/kernelbase/file.c | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index fdef78a4466..ee818a0e4a1 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -400,11 +400,9 @@ static void test_FileTimeToSystemTime(void) ft.dwLowDateTime = -1; SetLastError(0xdeadbeef); ret = FileTimeToSystemTime(&ft, &st); - todo_wine { ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); - } }
static void test_FileTimeToLocalFileTime(void) diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index c6dc904044a..a3a4b4f480b 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -3874,8 +3874,14 @@ BOOL WINAPI DECLSPEC_HOTPATCH FileTimeToLocalFileTime( const FILETIME *utc, FILE BOOL WINAPI DECLSPEC_HOTPATCH FileTimeToSystemTime( const FILETIME *ft, SYSTEMTIME *systime ) { TIME_FIELDS tf; + const LARGE_INTEGER *li = (const LARGE_INTEGER *)ft;
- RtlTimeToTimeFields( (const LARGE_INTEGER *)ft, &tf ); + if (li->QuadPart < 0) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + RtlTimeToTimeFields( li, &tf ); systime->wYear = tf.Year; systime->wMonth = tf.Month; systime->wDay = tf.Day;