From: Roger Dingledine Date: Sat, 24 Jun 2006 04:57:59 +0000 (+0000) Subject: refuse to write an iso_time which we can't parse, when dumping X-Git-Tag: tor-0.1.1.23~162 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f88d555ce07489e1e5294e334496250992860cbc;p=thirdparty%2Ftor.git refuse to write an iso_time which we can't parse, when dumping bandwidth state. this fixes the particular incident in bug 308, but the general issue remains. svn:r6684 --- diff --git a/src/or/hibernate.c b/src/or/hibernate.c index da74e98dd2..d4e6ceb078 100644 --- a/src/or/hibernate.c +++ b/src/or/hibernate.c @@ -536,7 +536,7 @@ accounting_set_wakeup_time(void) #define BW_ACCOUNTING_VERSION 1 /** Save all our bandwidth tracking information to disk. Return 0 on - * success, -1 on failure*/ + * success, -1 on failure. */ int accounting_record_bandwidth_usage(time_t now) { @@ -545,11 +545,18 @@ accounting_record_bandwidth_usage(time_t now) char time1[ISO_TIME_LEN+1]; char time2[ISO_TIME_LEN+1]; char *cp = buf; + time_t tmp; /* Format is: Version\nTime\nTime\nRead\nWrite\nSeconds\nExpected-Rate\n */ format_iso_time(time1, interval_start_time); format_iso_time(time2, now); + /* now check to see if they're valid times -- if they're not, + * and we write them, then tor will refuse to start next time. */ + if (parse_iso_time(time1, &tmp) || parse_iso_time(time2, &tmp)) { + log_warn(LD_ACCT, "Created a time that we refused to parse."); + return -1; + } tor_snprintf(cp, sizeof(buf), "%d\n%s\n%s\n"U64_FORMAT"\n"U64_FORMAT"\n%lu\n%lu\n", BW_ACCOUNTING_VERSION,