Module: wine Branch: master Commit: a5d14fa980542fcf26aeb5fa41e098b042f7b29d URL: https://source.winehq.org/git/wine.git/?a=commit;h=a5d14fa980542fcf26aeb5fa4... Author: Daniel Lehman <dlehman(a)esri.com> Date: Tue Mar 15 10:15:13 2022 -0700 kernelbase: Check for invalid value in FileTimeToSystemTime. Signed-off-by: Daniel Lehman <dlehman(a)esri.com> Signed-off-by: Alexandre Julliard <julliard(a)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;