Explorar el Código

Have correct_tm set tm_wday as well.

The tm_wday field had been left uninitialized, which was causing
some assertions to fail on Windows unit tests.

Fixes bug 18977.
Nick Mathewson hace 10 años
padre
commit
e57f26c135
Se han modificado 3 ficheros con 9 adiciones y 0 borrados
  1. 4 0
      changes/bug18977
  2. 3 0
      src/common/compat.c
  3. 2 0
      src/common/util.c

+ 4 - 0
changes/bug18977

@@ -0,0 +1,4 @@
+  o Minor bugfixes (time handling):
+    - When correcting a corrupt 'struct tm' value, fill in the tm_wday
+      field. Otherwise, our unit tests crash on Windows.
+      Fixes bug 18977; bugfix on 0.2.2.25-alpha.

+ 3 - 0
src/common/compat.c

@@ -2462,6 +2462,7 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
       r->tm_mon = 11;
       r->tm_mday = 31;
       r->tm_yday = 365;
+      r->tm_wday = 6;
       r->tm_hour = 23;
       r->tm_min = 59;
       r->tm_sec = 59;
@@ -2479,6 +2480,7 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
       r->tm_mon = 0;
       r->tm_mday = 1;
       r->tm_yday = 1;
+      r->tm_wday = 0;
       r->tm_hour = 0;
       r->tm_min = 0 ;
       r->tm_sec = 0;
@@ -2492,6 +2494,7 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
       r->tm_mon = 11;
       r->tm_mday = 31;
       r->tm_yday = 365;
+      r->tm_wday = 6;
       r->tm_hour = 23;
       r->tm_min = 59;
       r->tm_sec = 59;

+ 2 - 0
src/common/util.c

@@ -1460,6 +1460,7 @@ parse_iso_time(const char *cp, time_t *t)
   st_tm.tm_hour = hour;
   st_tm.tm_min = minute;
   st_tm.tm_sec = second;
+  st_tm.tm_wday = 0; /* Should be ignored. */
 
   if (st_tm.tm_year < 70) {
     char *esc = esc_for_log(cp);
@@ -1517,6 +1518,7 @@ parse_http_time(const char *date, struct tm *tm)
   tm->tm_hour = (int)tm_hour;
   tm->tm_min = (int)tm_min;
   tm->tm_sec = (int)tm_sec;
+  tm->tm_wday = 0; /* Leave this unset. */
 
   month[3] = '\0';
   /* Okay, now decode the month. */