diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-01-01 23:09:19 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-01-01 23:09:19 +0000 |
commit | 04db9de8474a07ecabfdc34f4715f54ff2c630dc (patch) | |
tree | 6edf44486c734aedd2a3e299aa0a951ab2fc104b /src/common | |
parent | 3dc69d3add2c0842aee953b2d7a6d19b07d0dead (diff) | |
download | tor-04db9de8474a07ecabfdc34f4715f54ff2c630dc.tar.gz tor-04db9de8474a07ecabfdc34f4715f54ff2c630dc.zip |
Fix assertion-trigger bug found by sjmurdoch
svn:r5689
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/util.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/common/util.c b/src/common/util.c index 3528ec3063..28dd3938f3 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -646,6 +646,10 @@ tor_timegm(struct tm *tm) unsigned long year, days, hours, minutes; int i; year = tm->tm_year + 1900; + if (year < 1970 || tm->tm_mon < 0 || tm->tm_mon > 11) { + warn(LD_BUG, "Out-of-range argument to tor_timegm"); + return 0; + } tor_assert(year >= 1970); tor_assert(tm->tm_mon >= 0); tor_assert(tm->tm_mon <= 11); @@ -714,9 +718,14 @@ parse_rfc1123_time(const char *buf, time_t *t) warn(LD_GENERAL, "Got invalid RFC1123 time \"%s\"", buf); return -1; } - tm.tm_mon = m; + + if (tm.tm_year < 1970) { + warn(LD_GENERAL, "Got invalid RFC1123 time \"%s\". (Before 1970)", buf); + return -1; + } tm.tm_year -= 1900; + *t = tor_timegm(&tm); return 0; } @@ -760,6 +769,10 @@ parse_iso_time(const char *cp, time_t *t) st_tm.tm_min = minute; st_tm.tm_sec = second; #endif + if (st_tm.tm_year < 70) { + warn(LD_GENERAL, "Got invalid ISO time \"%s\". (Before 1970)", cp); + return -1; + } *t = tor_timegm(&st_tm); return 0; } |