asctime/ctime: Check for too low input time, fixes one msvcrt time winetest
[reactos.git] / reactos / lib / sdk / crt / time / ctime.c
index a3ed572..49b89a5 100644 (file)
@@ -1200,14 +1200,23 @@ asctime(const struct tm *timeptr)
     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
   };
   static char result[26];
+  char* res = result;
 
-  (void) sprintf(result, "%.3s %.3s%3d %02d:%02d:%02d %d\n",
-         wday_name[timeptr->tm_wday],
-         mon_name[timeptr->tm_mon],
-         timeptr->tm_mday, timeptr->tm_hour,
-         timeptr->tm_min, timeptr->tm_sec,
-         TM_YEAR_BASE + timeptr->tm_year);
-  return result;
+  /* Check for invalid input time */
+  if (timeptr->tm_year <= 69)
+  {
+    res = NULL;
+  }
+  else
+  {
+    sprintf(res, "%.3s %.3s%3d %02d:%02d:%02d %d\n",
+            wday_name[timeptr->tm_wday],
+            mon_name[timeptr->tm_mon],
+            timeptr->tm_mday, timeptr->tm_hour,
+            timeptr->tm_min, timeptr->tm_sec,
+            TM_YEAR_BASE + timeptr->tm_year);
+  }
+  return res;
 }
 
 /*
@@ -1276,7 +1285,9 @@ time2(struct tm *tmp, void (*const funcp)(const time_t * CPP_CONST, const long,
   int saved_seconds;
   time_t newt;
   time_t t;
-  struct tm yourtm, mytm;
+
+  /* GCC complaints that it may be used uninitialized */
+  struct tm yourtm, mytm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
   *okayp = FALSE;
   yourtm = *tmp;