diff --git a/history.txt b/history.txt index 02b1f303be..f85acf8cff 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2011-10-05 zzz + * Streaming: Fix build + * UDP: Catch address without key sooner + 2011-09-30 zzz * logs.jsp: Add wrapper version * Shitlist: Shorten time diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f7d70ed0aa..3c775e75ad 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 = 24; + public final static long BUILD = 25; /** for example "-test" */ public final static String EXTRA = "-rc"; diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index a131d98503..4e504ea74b 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -182,9 +182,24 @@ class EstablishmentManager { } deferred = _queuedOutbound.size(); } else { + // must have a valid session key + byte[] keyBytes = addr.getIntroKey(); + if (keyBytes == null) { + _transport.markUnreachable(msg.getTarget().getIdentity().calculateHash()); + _transport.failed(msg, "Peer has no key, cannot establish"); + return; + } + SessionKey sessionKey; + try { + sessionKey = new SessionKey(keyBytes); + } catch (IllegalArgumentException iae) { + _transport.markUnreachable(msg.getTarget().getIdentity().calculateHash()); + _transport.failed(msg, "Peer has bad key, cannot establish"); + return; + } state = new OutboundEstablishState(_context, remAddr, port, msg.getTarget().getIdentity(), - new SessionKey(addr.getIntroKey()), addr); + sessionKey, addr); OutboundEstablishState oldState = _outboundStates.putIfAbsent(to, state); boolean isNew = oldState == null; if (!isNew)