Jeff Smith : ucrtbase: Strftime %y works for years 0 to 9999.

Alexandre Julliard julliard at winehq.org
Wed Nov 13 16:01:13 CST 2019


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

Author: Jeff Smith <whydoubt at gmail.com>
Date:   Wed Nov 13 22:08:03 2019 +0100

ucrtbase: Strftime %y works for years 0 to 9999.

Signed-off-by: Jeff Smith <whydoubt at gmail.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/time.c         | 9 ++++++++-
 dlls/ucrtbase/tests/misc.c | 6 +++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index 142a96aca1..ae6fcc8b7a 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -1316,7 +1316,14 @@ static MSVCRT_size_t strftime_helper(char *str, MSVCRT_size_t max, const char *f
                 return 0;
             break;
         case 'y':
-            if(!strftime_int(str, &ret, max, mstm->tm_year%100, alternate ? 0 : 2, 0, 99))
+#if _MSVCR_VER>=140
+            if(!MSVCRT_CHECK_PMT(mstm->tm_year>=-1900 && mstm->tm_year<=8099))
+                goto einval_error;
+            tmp = (mstm->tm_year+1900)%100;
+#else
+            tmp = mstm->tm_year%100;
+#endif
+            if(!strftime_int(str, &ret, max, tmp, alternate ? 0 : 2, 0, 99))
                 return 0;
             break;
         case 'Y':
diff --git a/dlls/ucrtbase/tests/misc.c b/dlls/ucrtbase/tests/misc.c
index 3095d9ed01..fb138a0fa4 100644
--- a/dlls/ucrtbase/tests/misc.c
+++ b/dlls/ucrtbase/tests/misc.c
@@ -379,7 +379,7 @@ static void __cdecl global_invalid_parameter_handler(
         const wchar_t *expression, const wchar_t *function,
         const wchar_t *file, unsigned line, uintptr_t arg)
 {
-    CHECK_EXPECT(global_invalid_parameter_handler);
+    CHECK_EXPECT2(global_invalid_parameter_handler);
 }
 
 static void __cdecl thread_invalid_parameter_handler(
@@ -928,6 +928,10 @@ static void test_strftime(void)
         {"%V", "01", { 0, 0, 0, 1, 0, 70, 4, 0, 0 }, TRUE},
         {"%V", "52", { 0, 0, 0, 1, 0, 117, 0, 0, 0 }, TRUE},
         {"%V", "53", { 0, 0, 14, 1, 0, 121, 6, 0, 0 }, TRUE},
+        {"%y", "", { 0, 0, 0, 0, 0, -1901, 0, 0, 0 }},
+        {"%y", "00", { 0, 0, 0, 0, 0, -1900, 0, 0, 0 }},
+        {"%y", "99", { 0, 0, 0, 0, 0, 8099, 0, 0, 0 }},
+        {"%y", "", { 0, 0, 0, 0, 0, 8100, 0, 0, 0 }},
         {"%g", "71", { 0, 0, 0, 2, 0, 72, 0, 1, 0 }},
         {"%g", "72", { 0, 0, 0, 3, 0, 72, 1, 2, 0 }},
         {"%G", "1971", { 0, 0, 0, 2, 0, 72, 0, 1, 0 }},




More information about the wine-cvs mailing list