[tor-commits] [onionoo/master] Fix off-by-one bug in writing history documents.

karsten at torproject.org karsten at torproject.org
Wed Feb 7 10:19:32 UTC 2018


commit bd2c7af771a64dd393970e2e483c59778b32dbfc
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Mon Jan 15 11:12:51 2018 +0100

    Fix off-by-one bug in writing history documents.
    
    When we consider a history interval from start to end, we really mean
    the interval [start, end[. Fixing a few off-by-one bugs in the code.
---
 .../java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java   | 4 ++--
 .../java/org/torproject/onionoo/writer/ClientsDocumentWriter.java     | 4 ++--
 src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java | 4 ++--
 .../java/org/torproject/onionoo/writer/WeightsDocumentWriter.java     | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
index 99a5a00..f1c5041 100644
--- a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
@@ -111,7 +111,7 @@ public class BandwidthDocumentWriter implements DocumentWriter {
       long totalBandwidth = 0L;
       for (long[] v : history.values()) {
         long endMillis = v[1];
-        if (endMillis < intervalStartMillis) {
+        if (endMillis <= intervalStartMillis) {
           continue;
         } else if (endMillis > graphEndMillis) {
           break;
@@ -124,7 +124,7 @@ public class BandwidthDocumentWriter implements DocumentWriter {
           continue;
         }
         while ((intervalStartMillis / dataPointInterval)
-            != (endMillis / dataPointInterval)) {
+            != ((endMillis - 1L) / dataPointInterval)) {
           dataPoints.add(totalMillis * 5L < dataPointInterval
               ? -1L : (totalBandwidth * DateTimeHelper.ONE_SECOND)
               / totalMillis);
diff --git a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
index 834df9c..81168f5 100644
--- a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
@@ -140,13 +140,13 @@ public class ClientsDocumentWriter implements DocumentWriter {
     long millis = 0L;
     double responses = 0.0;
     for (ClientsHistory hist : history) {
-      if (hist.getEndMillis() < intervalStartMillis) {
+      if (hist.getEndMillis() <= intervalStartMillis) {
         continue;
       } else if (hist.getEndMillis() > graphEndMillis) {
         break;
       }
       while ((intervalStartMillis / dataPointInterval)
-          != (hist.getEndMillis() / dataPointInterval)) {
+          != ((hist.getEndMillis() - 1L) / dataPointInterval)) {
         dataPoints.add(millis * 2L < dataPointInterval
             ? -1.0 : responses * ((double) DateTimeHelper.ONE_DAY)
             / (((double) millis) * 10.0));
diff --git a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
index f739b9e..2aee7a1 100644
--- a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
@@ -175,7 +175,7 @@ public class UptimeDocumentWriter implements DocumentWriter {
       }
       long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
           * hist.getUptimeHours();
-      if (histEndMillis < intervalStartMillis) {
+      if (histEndMillis <= intervalStartMillis) {
         continue;
       } else if (histEndMillis > graphEndMillis) {
         histEndMillis = graphEndMillis;
@@ -218,7 +218,7 @@ public class UptimeDocumentWriter implements DocumentWriter {
       }
       long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
           * hist.getUptimeHours();
-      if (histEndMillis < intervalStartMillis) {
+      if (histEndMillis <= intervalStartMillis) {
         continue;
       } else if (histEndMillis > graphEndMillis) {
         histEndMillis = graphEndMillis;
diff --git a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
index ad54fea..10d8a94 100644
--- a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
@@ -132,13 +132,13 @@ public class WeightsDocumentWriter implements DocumentWriter {
       long startMillis = e.getKey()[0];
       long endMillis = e.getKey()[1];
       double weight = e.getValue()[graphTypeIndex];
-      if (endMillis < intervalStartMillis) {
+      if (endMillis <= intervalStartMillis) {
         continue;
       } else if (endMillis > graphEndMillis) {
         break;
       }
       while ((intervalStartMillis / dataPointInterval)
-          != (endMillis / dataPointInterval)) {
+          != ((endMillis - 1L) / dataPointInterval)) {
         dataPoints.add(totalMillis * 5L < dataPointInterval
             ? -1.0 : totalWeightTimesMillis / (double) totalMillis);
         totalWeightTimesMillis = 0.0;





More information about the tor-commits mailing list