r11580@Kushana: nickm | 2006-12-15 00:09:46 -0500

Resolve bug 369: Check for integer underflow when printing "bytes left" accounting numbers.  Also fix a copyright date that I noticed while reading the bug.  Also make a buffer big enough that strings will not get truncated.  All are backport candidates.


svn:r9115
This commit is contained in:
Nick Mathewson 2006-12-15 05:12:42 +00:00
parent c44dd3870e
commit fdb10ff0b5
3 changed files with 12 additions and 5 deletions

View File

@ -51,6 +51,9 @@ Changes in version 0.1.2.5-xxxx - 200?-??-??
o Controller bugfixes:
- Report the circuit number correctly in STREAM CLOSED events. (Bug
reported by Mike Perry.)
- Do not report bizarre values for results of accounting GETINFOs
when the last second's write or read exceeds the alloted bandwidth.
(Bug 329.)
Changes in version 0.1.2.4-alpha - 2006-12-03

View File

@ -1585,7 +1585,7 @@ static void
print_usage(void)
{
printf(
"Copyright 2001-2005 Roger Dingledine, Nick Mathewson.\n\n"
"Copyright 2001-2006 Roger Dingledine, Nick Mathewson.\n\n"
"tor -f <torrc> [args]\n"
"See man page for options, or http://tor.eff.org/ for documentation.\n");
}

View File

@ -949,10 +949,14 @@ getinfo_helper_accounting(control_connection_t *conn,
U64_PRINTF_ARG(n_bytes_written_in_interval));
} else if (!strcmp(question, "accounting/bytes-left")) {
uint64_t limit = get_options()->AccountingMax;
*answer = tor_malloc(32);
tor_snprintf(*answer, 32, U64_FORMAT" "U64_FORMAT,
U64_PRINTF_ARG(limit - n_bytes_read_in_interval),
U64_PRINTF_ARG(limit - n_bytes_written_in_interval));
uint64_t read_left = 0, write_left = 0;
if (n_bytes_read_in_interval < limit)
read_left = limit - n_bytes_read_in_interval;
if (n_bytes_written_in_interval < limit)
write_left = limit - n_bytes_written_in_interval;
*answer = tor_malloc(64);
tor_snprintf(*answer, 64, U64_FORMAT" "U64_FORMAT,
U64_PRINTF_ARG(read_left), U64_PRINTF_ARG(write_left));
} else if (!strcmp(question, "accounting/interval-start")) {
*answer = tor_malloc(ISO_TIME_LEN+1);
format_iso_time(*answer, interval_start_time);