[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [metrics-lib/release] Avoid invoking overridable methods from constructors.
commit 9ccb934fac5827ef663e6740f64c4e06c6cb795e
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date: Sat Feb 22 09:13:33 2020 +0100
Avoid invoking overridable methods from constructors.
Fixes #33205.
---
CHANGELOG.md | 3 ++
.../descriptor/impl/BridgeNetworkStatusImpl.java | 4 +--
.../descriptor/impl/NetworkStatusImpl.java | 7 ++---
.../impl/RelayNetworkStatusConsensusImpl.java | 3 +-
.../descriptor/impl/RelayNetworkStatusImpl.java | 3 +-
.../impl/RelayNetworkStatusVoteImpl.java | 35 +++++++---------------
.../impl/RelayNetworkStatusVoteImplTest.java | 13 ++++++++
7 files changed, 36 insertions(+), 32 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bb8bb89..d58e92b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changes in version 2.1?.? - 2020-0?-??
+ * Minor changes
+ - Avoid invoking overridable methods from constructors.
+
# Changes in version 2.10.0 - 2020-01-15
diff --git a/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
index d3d546b..b9241a8 100644
--- a/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
@@ -22,8 +22,8 @@ public class BridgeNetworkStatusImpl extends NetworkStatusImpl
protected BridgeNetworkStatusImpl(byte[] rawDescriptorBytes,
int[] offsetAndLength, File descriptorFile, String fileName)
throws DescriptorParseException {
- super(rawDescriptorBytes, offsetAndLength, descriptorFile,
- false, false);
+ super(rawDescriptorBytes, offsetAndLength, descriptorFile, false);
+ this.splitAndParseParts(false);
this.setPublishedMillisFromFileName(fileName);
}
diff --git a/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
index b994016..4b160f5 100644
--- a/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
@@ -26,14 +26,13 @@ public abstract class NetworkStatusImpl extends DescriptorImpl {
protected Map<Integer, String> flagStrings = new HashMap<>();
protected NetworkStatusImpl(byte[] rawDescriptorBytes, int[] offsetAndLength,
- File descriptorFile, boolean containsDirSourceEntries,
- boolean blankLinesAllowed) throws DescriptorParseException {
+ File descriptorFile, boolean blankLinesAllowed)
+ throws DescriptorParseException {
super(rawDescriptorBytes, offsetAndLength, descriptorFile,
blankLinesAllowed);
- this.splitAndParseParts(containsDirSourceEntries);
}
- private void splitAndParseParts(boolean containsDirSourceEntries)
+ protected final void splitAndParseParts(boolean containsDirSourceEntries)
throws DescriptorParseException {
int firstRIndex = this.findFirstIndexOfKey(Key.R);
int firstDirectorySignatureIndex = this.findFirstIndexOfKey(
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index 79f0756..367865e 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -25,7 +25,8 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
protected RelayNetworkStatusConsensusImpl(byte[] consensusBytes,
int[] offsetAndLimit, File descriptorFile)
throws DescriptorParseException {
- super(consensusBytes, offsetAndLimit, descriptorFile, true, false);
+ super(consensusBytes, offsetAndLimit, descriptorFile, false);
+ this.splitAndParseParts(true);
Set<Key> exactlyOnceKeys = EnumSet.of(
Key.VOTE_STATUS, Key.CONSENSUS_METHOD, Key.VALID_AFTER, Key.FRESH_UNTIL,
Key.VALID_UNTIL, Key.VOTING_DELAY, Key.KNOWN_FLAGS);
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
index 0fba932..5de8f70 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
@@ -21,7 +21,8 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
protected RelayNetworkStatusImpl(byte[] statusBytes, int[] offsetAndLength,
File descriptorFile) throws DescriptorParseException {
- super(statusBytes, offsetAndLength, descriptorFile, false, true);
+ super(statusBytes, offsetAndLength, descriptorFile, true);
+ this.splitAndParseParts(false);
Set<Key> exactlyOnceKeys = EnumSet.of(
Key.NETWORK_STATUS_VERSION, Key.DIR_SOURCE, Key.FINGERPRINT,
Key.CONTACT, Key.DIR_SIGNING_KEY, Key.PUBLISHED);
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 56a9e21..7e8d816 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -26,7 +26,8 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
protected RelayNetworkStatusVoteImpl(byte[] voteBytes, int[] offsetAndLength,
File descriptorFile)
throws DescriptorParseException {
- super(voteBytes, offsetAndLength, descriptorFile, false, false);
+ super(voteBytes, offsetAndLength, descriptorFile, false);
+ this.splitAndParseParts(false);
Set<Key> exactlyOnceKeys = EnumSet.of(
Key.VOTE_STATUS, Key.PUBLISHED, Key.VALID_AFTER, Key.FRESH_UNTIL,
Key.VALID_UNTIL, Key.VOTING_DELAY, Key.KNOWN_FLAGS, Key.DIR_SOURCE,
@@ -52,20 +53,6 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
protected void parseHeader(int offset, int length)
throws DescriptorParseException {
- /* Initialize flag-thresholds values here for the case that the vote
- * doesn't contain those values. Initializing them in the constructor
- * or when declaring variables wouldn't work, because those parts are
- * evaluated later and would overwrite everything we parse here. */
- this.stableUptime = -1L;
- this.stableMtbf = -1L;
- this.fastBandwidth = -1L;
- this.guardWfu = -1.0;
- this.guardTk = -1L;
- this.guardBandwidthIncludingExits = -1L;
- this.guardBandwidthExcludingExits = -1L;
- this.enoughMtbfInfo = -1;
- this.ignoringAdvertisedBws = -1;
-
Scanner scanner = this.newScanner(offset, length).useDelimiter(NL);
Key nextCrypto = Key.EMPTY;
StringBuilder crypto = null;
@@ -847,63 +834,63 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
return new TreeSet<>(Arrays.asList(this.knownFlags));
}
- private long stableUptime;
+ private long stableUptime = -1L;
@Override
public long getStableUptime() {
return this.stableUptime;
}
- private long stableMtbf;
+ private long stableMtbf = -1L;
@Override
public long getStableMtbf() {
return this.stableMtbf;
}
- private long fastBandwidth;
+ private long fastBandwidth = -1L;
@Override
public long getFastBandwidth() {
return this.fastBandwidth;
}
- private double guardWfu;
+ private double guardWfu = -1.0;
@Override
public double getGuardWfu() {
return this.guardWfu;
}
- private long guardTk;
+ private long guardTk = -1L;
@Override
public long getGuardTk() {
return this.guardTk;
}
- private long guardBandwidthIncludingExits;
+ private long guardBandwidthIncludingExits = -1L;
@Override
public long getGuardBandwidthIncludingExits() {
return this.guardBandwidthIncludingExits;
}
- private long guardBandwidthExcludingExits;
+ private long guardBandwidthExcludingExits = -1L;
@Override
public long getGuardBandwidthExcludingExits() {
return this.guardBandwidthExcludingExits;
}
- private int enoughMtbfInfo;
+ private int enoughMtbfInfo = -1;
@Override
public int getEnoughMtbfInfo() {
return this.enoughMtbfInfo;
}
- private int ignoringAdvertisedBws;
+ private int ignoringAdvertisedBws = -1;
@Override
public int getIgnoringAdvertisedBws() {
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
index 6735b61..a9104b4 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
@@ -721,6 +721,8 @@ public class RelayNetworkStatusVoteImplTest {
assertEquals(3, vote.getDirKeyCertificateVersion());
assertEquals("80550987E1D626E3EBA5E5E75A458DE0626D088C",
vote.getIdentity());
+ assertTrue(vote.isSharedRandParticipate());
+ assertEquals(8, vote.getSharedRandCurrentNumReveals());
assertEquals(1303882477000L, /* 2011-04-27 05:34:37 */
vote.getDirKeyPublishedMillis());
assertEquals(1335504877000L, /* 2012-04-27 05:34:37 */
@@ -745,6 +747,8 @@ public class RelayNetworkStatusVoteImplTest {
+ "F3Yh\nrXVaaoP07r6Ta+s0g1Zijm3lms50Nk/4tV2p8Y63c3F4Q3DAnK40Oi"
+ "kfOIwEj+Ny\n+zBRQssP3hPhTPOj/A7o3mZZwtL6x1sxpeu/nME1l5E=\n"
+ "-----END SIGNATURE-----\n", signature.getSignature());
+ assertEquals(184320, vote.getGuardBandwidthExcludingExits());
+ assertEquals(1, vote.getEnoughMtbfInfo());
assertTrue(vote.getUnrecognizedLines().isEmpty());
}
@@ -1549,6 +1553,15 @@ public class RelayNetworkStatusVoteImplTest {
}
@Test
+ public void testSharedRandCurrentValueLineEmpty()
+ throws DescriptorParseException {
+ RelayNetworkStatusVote vote =
+ VoteBuilder.createWithSharedRandCurrentValueLine(null);
+ assertEquals(-1, vote.getSharedRandCurrentNumReveals());
+ assertNull(vote.getSharedRandCurrentValue());
+ }
+
+ @Test
public void testSharedRandCurrentNoNumReveals()
throws DescriptorParseException {
this.thrown.expect(DescriptorParseException.class);
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits