[tor-commits] [metrics-db/master] Handle @type annotations when reading descriptors.

karsten at torproject.org karsten at torproject.org
Wed May 16 10:33:22 UTC 2012


commit 65c525c2ac7f2f4a751615a3cab901b52ce99b6f
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Fri May 11 16:17:09 2012 +0200

    Handle @type annotations when reading descriptors.
---
 .../torproject/ernie/db/RelayDescriptorParser.java |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/org/torproject/ernie/db/RelayDescriptorParser.java b/src/org/torproject/ernie/db/RelayDescriptorParser.java
index f3e90f2..be54656 100644
--- a/src/org/torproject/ernie/db/RelayDescriptorParser.java
+++ b/src/org/torproject/ernie/db/RelayDescriptorParser.java
@@ -69,7 +69,10 @@ public class RelayDescriptorParser {
        * anyway. */
       BufferedReader br = new BufferedReader(new StringReader(new String(
           data, "US-ASCII")));
-      String line = br.readLine();
+      String line;
+      do {
+        line = br.readLine();
+      } while (line != null && line.startsWith("@"));
       if (line == null) {
         this.logger.fine("We were given an empty descriptor for "
             + "parsing. Ignoring.");
@@ -227,6 +230,15 @@ public class RelayDescriptorParser {
         String sigToken = "\nrouter-signature\n";
         String digest = null;
         int start = ascii.indexOf(startToken);
+        if (start > 0) {
+          /* Do not confuse "extra-info " in "@type extra-info 1.0" with
+           * "extra-info 0000...".  TODO This is a hack that should be
+           * solved by using metrics-lib some day. */
+          start = ascii.indexOf("\n" + startToken);
+          if (start > 0) {
+            start++;
+          }
+        }
         int sig = ascii.indexOf(sigToken) + sigToken.length();
         if (start >= 0 || sig >= 0 || sig > start) {
           byte[] forDigest = new byte[sig - start];



More information about the tor-commits mailing list