[tor-commits] [metrics-lib/master] Looks like blank lines are allowed in v2 statuses.
karsten at torproject.org
karsten at torproject.org
Wed May 16 17:43:12 UTC 2012
commit 02fa685e9ca3f0c577fec850d31650a2452f1926
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Wed May 16 17:35:17 2012 +0200
Looks like blank lines are allowed in v2 statuses.
For the moment, we still disallow blank lines in all other descriptors.
If this is not correct, we can easily fix that.
---
.../descriptor/impl/BridgeNetworkStatusImpl.java | 2 +-
.../descriptor/impl/BridgePoolAssignmentImpl.java | 2 +-
.../torproject/descriptor/impl/DescriptorImpl.java | 17 +++++++++--------
.../impl/DirectoryKeyCertificateImpl.java | 2 +-
.../torproject/descriptor/impl/ExitListImpl.java | 6 +-----
.../descriptor/impl/ExtraInfoDescriptorImpl.java | 2 +-
.../descriptor/impl/NetworkStatusImpl.java | 10 ++++------
.../impl/RelayNetworkStatusConsensusImpl.java | 2 +-
.../descriptor/impl/RelayNetworkStatusImpl.java | 5 ++++-
.../impl/RelayNetworkStatusVoteImpl.java | 2 +-
.../descriptor/impl/ServerDescriptorImpl.java | 2 +-
11 files changed, 25 insertions(+), 27 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java b/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
index e6d1942..09f2f86 100644
--- a/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
+++ b/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
@@ -15,7 +15,7 @@ public class BridgeNetworkStatusImpl extends NetworkStatusImpl
protected BridgeNetworkStatusImpl(byte[] statusBytes,
String fileName, boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(statusBytes, failUnrecognizedDescriptorLines, false);
+ super(statusBytes, failUnrecognizedDescriptorLines, false, false);
this.setPublishedMillisFromFileName(fileName);
}
diff --git a/src/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java b/src/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
index 7b87657..c4be80d 100644
--- a/src/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
+++ b/src/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
@@ -37,7 +37,7 @@ public class BridgePoolAssignmentImpl extends DescriptorImpl
protected BridgePoolAssignmentImpl(byte[] descriptorBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(descriptorBytes, failUnrecognizedDescriptorLines);
+ super(descriptorBytes, failUnrecognizedDescriptorLines, false);
this.parseDescriptorBytes();
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList(
new String[] { "bridge-pool-assignment" }));
diff --git a/src/org/torproject/descriptor/impl/DescriptorImpl.java b/src/org/torproject/descriptor/impl/DescriptorImpl.java
index 7503419..88db60a 100644
--- a/src/org/torproject/descriptor/impl/DescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/DescriptorImpl.java
@@ -131,13 +131,13 @@ public abstract class DescriptorImpl implements Descriptor {
}
protected DescriptorImpl(byte[] rawDescriptorBytes,
- boolean failUnrecognizedDescriptorLines)
+ boolean failUnrecognizedDescriptorLines, boolean blankLinesAllowed)
throws DescriptorParseException {
this.rawDescriptorBytes = rawDescriptorBytes;
this.failUnrecognizedDescriptorLines =
failUnrecognizedDescriptorLines;
this.cutOffAnnotations(rawDescriptorBytes);
- this.countKeywords(rawDescriptorBytes);
+ this.countKeywords(rawDescriptorBytes, blankLinesAllowed);
}
/* Parse annotation lines from the descriptor bytes. */
@@ -167,15 +167,15 @@ public abstract class DescriptorImpl implements Descriptor {
private String firstKeyword, lastKeyword;
private Map<String, Integer> parsedKeywords =
new HashMap<String, Integer>();
- private void countKeywords(byte[] rawDescriptorBytes)
- throws DescriptorParseException {
+ private void countKeywords(byte[] rawDescriptorBytes,
+ boolean blankLinesAllowed) throws DescriptorParseException {
if (rawDescriptorBytes.length == 0) {
throw new DescriptorParseException("Descriptor is empty.");
}
String descriptorString = new String(rawDescriptorBytes);
- if (descriptorString.startsWith("\n") ||
- descriptorString.contains("\n\n")) {
- throw new DescriptorParseException("Empty lines are not allowed.");
+ if (!blankLinesAllowed && (descriptorString.startsWith("\n") ||
+ descriptorString.contains("\n\n"))) {
+ throw new DescriptorParseException("Blank lines are not allowed.");
}
boolean skipCrypto = false;
Scanner s = new Scanner(descriptorString).useDelimiter("\n");
@@ -185,7 +185,8 @@ public abstract class DescriptorImpl implements Descriptor {
skipCrypto = true;
} else if (line.startsWith("-----END")) {
skipCrypto = false;
- } else if (!line.startsWith("@") && !skipCrypto) {
+ } else if (!line.isEmpty() && !line.startsWith("@") &&
+ !skipCrypto) {
String lineNoOpt = line.startsWith("opt ") ?
line.substring("opt ".length()) : line;
String keyword = lineNoOpt.split(" ", -1)[0];
diff --git a/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java b/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
index 2483aa1..338f8e6 100644
--- a/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
+++ b/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
@@ -38,7 +38,7 @@ public class DirectoryKeyCertificateImpl extends DescriptorImpl
protected DirectoryKeyCertificateImpl(byte[] rawDescriptorBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(rawDescriptorBytes, failUnrecognizedDescriptorLines);
+ super(rawDescriptorBytes, failUnrecognizedDescriptorLines, false);
this.parseDescriptorBytes();
this.calculateDigest();
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList((
diff --git a/src/org/torproject/descriptor/impl/ExitListImpl.java b/src/org/torproject/descriptor/impl/ExitListImpl.java
index dae2fb2..277112f 100644
--- a/src/org/torproject/descriptor/impl/ExitListImpl.java
+++ b/src/org/torproject/descriptor/impl/ExitListImpl.java
@@ -20,7 +20,7 @@ public class ExitListImpl extends DescriptorImpl implements ExitList {
protected ExitListImpl(byte[] rawDescriptorBytes, String fileName,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(rawDescriptorBytes, failUnrecognizedDescriptorLines);
+ super(rawDescriptorBytes, failUnrecognizedDescriptorLines, false);
this.setPublishedMillisFromFileName(fileName);
this.splitAndParseExitListEntries(rawDescriptorBytes);
}
@@ -50,10 +50,6 @@ public class ExitListImpl extends DescriptorImpl implements ExitList {
throw new DescriptorParseException("Descriptor is empty.");
}
String descriptorString = new String(rawDescriptorBytes);
- if (descriptorString.startsWith("\n") ||
- descriptorString.contains("\n\n")) {
- throw new DescriptorParseException("Empty lines are not allowed.");
- }
Scanner s = new Scanner(descriptorString).useDelimiter("\n");
StringBuilder sb = new StringBuilder();
while (s.hasNext()) {
diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index 184598a..d8fbc8d 100644
--- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -41,7 +41,7 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
protected ExtraInfoDescriptorImpl(byte[] descriptorBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(descriptorBytes, failUnrecognizedDescriptorLines);
+ super(descriptorBytes, failUnrecognizedDescriptorLines, false);
this.parseDescriptorBytes();
this.calculateDigest();
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList((
diff --git a/src/org/torproject/descriptor/impl/NetworkStatusImpl.java b/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
index 35e63b3..5a6af9e 100644
--- a/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
+++ b/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
@@ -18,8 +18,10 @@ public abstract class NetworkStatusImpl extends DescriptorImpl {
protected NetworkStatusImpl(byte[] rawDescriptorBytes,
boolean failUnrecognizedDescriptorLines,
- boolean containsDirSourceEntries) throws DescriptorParseException {
- super(rawDescriptorBytes, failUnrecognizedDescriptorLines);
+ boolean containsDirSourceEntries, boolean blankLinesAllowed)
+ throws DescriptorParseException {
+ super(rawDescriptorBytes, failUnrecognizedDescriptorLines,
+ blankLinesAllowed);
this.splitAndParseParts(rawDescriptorBytes, containsDirSourceEntries);
}
@@ -29,10 +31,6 @@ public abstract class NetworkStatusImpl extends DescriptorImpl {
throw new DescriptorParseException("Descriptor is empty.");
}
String descriptorString = new String(rawDescriptorBytes);
- if (descriptorString.startsWith("\n") ||
- descriptorString.contains("\n\n")) {
- throw new DescriptorParseException("Empty lines are not allowed.");
- }
int startIndex = 0;
int firstDirSourceIndex = !containsDirSourceEntries ? -1 :
this.findFirstIndexOfKeyword(descriptorString, "dir-source");
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index 14082b8..f296fa6 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -41,7 +41,7 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
protected RelayNetworkStatusConsensusImpl(byte[] consensusBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(consensusBytes, failUnrecognizedDescriptorLines, true);
+ super(consensusBytes, failUnrecognizedDescriptorLines, true, false);
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList((
"vote-status,consensus-method,valid-after,fresh-until,"
+ "valid-until,voting-delay,known-flags").split(",")));
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
index f3ab34a..78cacd0 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
@@ -39,7 +39,7 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
protected RelayNetworkStatusImpl(byte[] statusBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(statusBytes, failUnrecognizedDescriptorLines, false);
+ super(statusBytes, failUnrecognizedDescriptorLines, false, true);
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList((
"network-status-version,dir-source,fingerprint,contact,"
+ "dir-signing-key,published").split(",")));
@@ -84,6 +84,9 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
StringBuilder crypto = null;
while (s.hasNext()) {
String line = s.next();
+ if (line.isEmpty()) {
+ continue;
+ }
String[] parts = line.split(" ");
String keyword = parts[0];
if (keyword.equals("network-status-version")) {
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 7cce313..d5b87c1 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -39,7 +39,7 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
protected RelayNetworkStatusVoteImpl(byte[] voteBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(voteBytes, failUnrecognizedDescriptorLines, false);
+ super(voteBytes, failUnrecognizedDescriptorLines, false, false);
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList((
"vote-status,consensus-methods,published,valid-after,fresh-until,"
+ "valid-until,voting-delay,known-flags,dir-source,"
diff --git a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
index 54f8f92..77b06dd 100644
--- a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
@@ -38,7 +38,7 @@ public class ServerDescriptorImpl extends DescriptorImpl
protected ServerDescriptorImpl(byte[] descriptorBytes,
boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
- super(descriptorBytes, failUnrecognizedDescriptorLines);
+ super(descriptorBytes, failUnrecognizedDescriptorLines, false);
this.parseDescriptorBytes();
this.calculateDigest();
Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList(
More information about the tor-commits
mailing list