aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-04-28 16:05:59 -0400
committerNick Mathewson <nickm@torproject.org>2011-04-28 16:05:59 -0400
commit88638d40ca08057e006c0dd6604a4255371acc75 (patch)
treeb16a2be1005284bae27e2a86dc917c91fc95ce36
parent32918e954fa3c2d55eb6b7695bd833197c31e09e (diff)
parent3055acbdbe914c31ca4825ed60b4cce6676bd61e (diff)
downloadtor-88638d40ca08057e006c0dd6604a4255371acc75.tar
tor-88638d40ca08057e006c0dd6604a4255371acc75.tar.gz
Merge remote-tracking branch 'origin/maint-0.2.2'
-rw-r--r--changes/ticket24974
-rw-r--r--src/or/rephist.c14
2 files changed, 16 insertions, 2 deletions
diff --git a/changes/ticket2497 b/changes/ticket2497
new file mode 100644
index 000000000..51171412b
--- /dev/null
+++ b/changes/ticket2497
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Ensure that no empty [dirreq-](read|write)-history lines are added
+ to an extrainfo document. Implements ticket 2497.
+
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 621816c27..7aa91b8f5 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -1530,10 +1530,15 @@ rep_hist_get_bandwidth_lines(void)
size_t len;
/* opt [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
- len = (67+21*NUM_TOTALS)*4;
+/* The n,n,n part above. Largest representation of a uint64_t is 20 chars
+ * long, plus the comma. */
+#define MAX_HIST_VALUE_LEN 21*NUM_TOTALS
+ len = (67+MAX_HIST_VALUE_LEN)*4;
buf = tor_malloc_zero(len);
cp = buf;
for (r=0;r<4;++r) {
+ char tmp[MAX_HIST_VALUE_LEN];
+ size_t slen;
switch (r) {
case 0:
b = write_array;
@@ -1553,11 +1558,16 @@ rep_hist_get_bandwidth_lines(void)
break;
}
tor_assert(b);
+ slen = rep_hist_fill_bandwidth_history(tmp, MAX_HIST_VALUE_LEN, b);
+ /* If we don't have anything to write, skip to the next entry. */
+ if (slen == 0)
+ continue;
format_iso_time(t, b->next_period-NUM_SECS_BW_SUM_INTERVAL);
tor_snprintf(cp, len-(cp-buf), "%s %s (%d s) ",
desc, t, NUM_SECS_BW_SUM_INTERVAL);
cp += strlen(cp);
- cp += rep_hist_fill_bandwidth_history(cp, len-(cp-buf), b);
+ strlcat(cp, tmp, len-(cp-buf));
+ cp += slen;
strlcat(cp, "\n", len-(cp-buf));
++cp;
}