[tor-commits] [tor/maint-0.2.2] Don't report empty bw-history lines in extrainfo

nickm at torproject.org nickm at torproject.org
Thu Apr 28 20:04:50 UTC 2011


commit c1927d7d5f5dff5b8d7da5bd4e7a743eb06bcbb3
Author: Sebastian Hahn <sebastian at torproject.org>
Date:   Sat Apr 16 16:01:36 2011 +0200

    Don't report empty bw-history lines in extrainfo
    
    Some tor relays would report lines like these in their extrainfo
    documents:
    dirreq-write-history 2011-03-14 16:46:44 (900 s)
    
    This was confusing to some people who look at the stats. It would happen
    whenever a relay first starts up, or when a relay has dirport disabled.
    Change this so that lines without actual bw entries are omitted.
    Implements ticket 2497.
---
 changes/ticket2497 |    4 ++++
 src/or/rephist.c   |   14 ++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/changes/ticket2497 b/changes/ticket2497
new file mode 100644
index 0000000..5117141
--- /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 9b7eefe..b55797a 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -1524,10 +1524,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;
@@ -1547,11 +1552,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;
   }





More information about the tor-commits mailing list