Daniel Lehman : kernelbase: Check for invalid value in FileTimeToSystemTime.

Alexandre Julliard julliard at winehq.org
Wed Mar 16 16:48:23 CDT 2022


Module: wine
Branch: master
Commit: a5d14fa980542fcf26aeb5fa41e098b042f7b29d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a5d14fa980542fcf26aeb5fa41e098b042f7b29d

Author: Daniel Lehman <dlehman at esri.com>
Date:   Tue Mar 15 10:15:13 2022 -0700

kernelbase: Check for invalid value in FileTimeToSystemTime.

Signed-off-by: Daniel Lehman <dlehman at esri.com>
Signed-off-by: Alexandre Julliard <julliard at 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;




More information about the wine-cvs mailing list