mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Clamp (some) years supplied by the system to 1 CE
Clamp year values returned by system localtime(_r) and gmtime(_r) to year 1. This ensures tor can read any values it might write out. Fixes bug 13476.
This commit is contained in:
@@ -10,3 +10,6 @@
|
||||
for validity, taking leap years into account.
|
||||
Improves HTTP header validation.
|
||||
Implemented with bug 13476.
|
||||
- Clamp year values returned by system localtime(_r) and gmtime(_r)
|
||||
to year 1. This ensures tor can read any values it might write out.
|
||||
Fixes bug 13476.
|
||||
|
||||
+11
-1
@@ -2770,7 +2770,9 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
|
||||
const char *outcome;
|
||||
|
||||
if (PREDICT_LIKELY(r)) {
|
||||
if (r->tm_year > 8099) { /* We can't strftime dates after 9999 CE. */
|
||||
/* We can't strftime dates after 9999 CE, and we want to avoid dates
|
||||
* before 1 CE (avoiding the year 0 issue and negative years). */
|
||||
if (r->tm_year > 8099) {
|
||||
r->tm_year = 8099;
|
||||
r->tm_mon = 11;
|
||||
r->tm_mday = 31;
|
||||
@@ -2778,6 +2780,14 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
|
||||
r->tm_hour = 23;
|
||||
r->tm_min = 59;
|
||||
r->tm_sec = 59;
|
||||
} else if (r->tm_year < (1-1900)) {
|
||||
r->tm_year = (1-1900);
|
||||
r->tm_mon = 0;
|
||||
r->tm_mday = 1;
|
||||
r->tm_yday = 0;
|
||||
r->tm_hour = 0;
|
||||
r->tm_min = 0;
|
||||
r->tm_sec = 0;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user