From bd6c588c747b5b363361c20e420516c465d94321 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 16 Mar 2014 18:27:46 +0000 Subject: [PATCH] * SSU: Fix corruption of introducer keys --- history.txt | 3 +++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- .../java/src/net/i2p/router/transport/udp/PacketBuilder.java | 5 ++++- .../java/src/net/i2p/router/transport/udp/UDPTransport.java | 5 ++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/history.txt b/history.txt index 1b7184728..afddf70d0 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,6 @@ +2014-03-16 zzz + * SSU: Fix corruption of introducer keys + 2014-03-15 zzz * Certificate: Fix null cert hash code * Hash: Cleanup of cached hash diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 78754ef28..601535dbe 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 20; + public final static long BUILD = 21; /** for example "-test" */ public final static String EXTRA = "-rc"; diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java index c70177b9d..053703cb1 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -1108,7 +1108,10 @@ class PacketBuilder { SessionKey cipherKey = null; SessionKey macKey = null; // first look up by ikey, it is equal to router hash for now - PeerState bobState = transport.getPeerState(Hash.create(ikey)); + PeerState bobState = null; + if (ikey.length == Hash.HASH_LENGTH) { + bobState = transport.getPeerState(new Hash(ikey)); + } if (bobState == null) { RemoteHostId rhid = new RemoteHostId(iaddr.getAddress(), iport); bobState = transport.getPeerState(rhid); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index cacd091a6..fe9dc623e 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1360,7 +1360,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority int valid = 0; for (int i = 0; i < ua.getIntroducerCount(); i++) { // warning: this is only valid as long as we use the ident hash as their key. - PeerState peer = getPeerState(Hash.create(ua.getIntroducerKey(i))); + byte[] key = ua.getIntroducerKey(i); + if (key.length != Hash.HASH_LENGTH) + continue; + PeerState peer = getPeerState(new Hash(key)); if (peer != null) valid++; }