[tor-commits] [metrics-lib/master] Don't skip unrecognized lines in certain cases.

karsten at torproject.org karsten at torproject.org
Sun Apr 23 18:20:23 UTC 2017


commit 8f69d784be6830b62bcaa9739e39043e240ebb4c
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Fri Apr 7 15:19:44 2017 +0200

    Don't skip unrecognized lines in certain cases.
    
    When we started using Java 7's switch-on-String in 2b4d773, we broke
    unrecognized line parsing in extra-info descriptors.  Namely, when we
    reached the end of a crypto block we didn't reset the list for
    collecting crypto lines.  So far so good, but any following
    unrecognized lines would be collected as crypto lines and later
    discarded, rather than being added to the unrecognized-lines list and
    later reported.
    
    This only affects relay descriptors, because sanitized bridge
    descriptors don't contain crypto blocks.  And it only affects relay
    descriptors with crypto blocks, like "identity-ed25519", whereas relay
    extra-info descriptors published by older versions were not affected.
    
    Fixes #21890.
---
 CHANGELOG.md                                                      | 7 +++++++
 .../org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java   | 4 ++--
 .../torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java   | 8 ++++++++
 .../org/torproject/descriptor/impl/ServerDescriptorImplTest.java  | 8 ++++++++
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b85361..0cb2acd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+# Changes in version ???
+
+ # Medium changes
+   - Fix a bug where unrecognized lines in extra-info descriptors
+     below crypto blocks were silently skipped.
+
+
 # Changes in version 1.6.0 - 2017-02-17
 
  * Major changes
diff --git a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index d4be77a..136f31e 100644
--- a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -270,9 +270,9 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
                 }
                 this.unrecognizedLines.addAll(cryptoLines);
               }
-              cryptoLines = null;
-              nextCrypto = "";
           }
+          cryptoLines = null;
+          nextCrypto = "";
           break;
         default:
           if (cryptoLines != null) {
diff --git a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index 096314e..c29df8c 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -1805,6 +1805,14 @@ public class ExtraInfoDescriptorImplTest {
         + ROUTER_SIG_ED25519_LINE);
   }
 
+  @Test(expected = DescriptorParseException.class)
+  public void testEd25519FollowedbyUnrecognizedLine()
+      throws DescriptorParseException {
+    DescriptorBuilder.createWithEd25519Lines(IDENTITY_ED25519_LINES,
+        MASTER_KEY_ED25519_LINE, ROUTER_SIG_ED25519_LINE
+        + "\nunrecognized-line 1");
+  }
+
   @Test()
   public void testExtraInfoDigestSha256Relay()
       throws DescriptorParseException {
diff --git a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index 4370321..80dc815 100644
--- a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -1652,6 +1652,14 @@ public class ServerDescriptorImplTest {
         + ROUTER_SIG_ED25519_LINE);
   }
 
+  @Test(expected = DescriptorParseException.class)
+  public void testEd25519FollowedbyUnrecognizedLine()
+      throws DescriptorParseException {
+    DescriptorBuilder.createWithEd25519Lines(IDENTITY_ED25519_LINES,
+        MASTER_KEY_ED25519_LINE, ROUTER_SIG_ED25519_LINE
+        + "\nunrecognized-line 1");
+  }
+
   private static final String ONION_KEY_CROSSCERT_LINES =
       "onion-key-crosscert\n"
       + "-----BEGIN CROSSCERT-----\n"



More information about the tor-commits mailing list