From 918b1acb8fd9dc5d503a35d406763eeb86ec9e82 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Tue, 19 Feb 2008 15:28:41 +0000
Subject: [PATCH]     * Tunnels: Enforce max tunnel length of 8, catch an index
 error       http://forum.i2p/viewtopic.php?t=2561

---
 .../java/src/net/i2p/router/tunnel/pool/BuildHandler.java   | 4 ++++
 .../src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java  | 6 ++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
index ee98bc4541..0ac378d9d1 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java
@@ -224,6 +224,10 @@ class BuildHandler {
             for (int i = 0; i < cfg.getLength(); i++) {
                 Hash peer = cfg.getPeer(i);
                 int record = order.indexOf(new Integer(i));
+                if (record < 0) {
+                    _log.error("Bad status index " + i);
+                    return;
+                }
                 int howBad = statuses[record];
                 if (_log.shouldLog(Log.INFO))
                     _log.info(msg.getUniqueId() + ": Peer " + peer.toBase64() + " replied with status " + howBad);
diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java
index 565ac02ff2..78a44beb59 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java
@@ -43,9 +43,11 @@ public abstract class TunnelPeerSelector {
                 else
                     length -= off;
             }
-            if (length < 0)
-                length = 0;
         }
+        if (length < 0)
+            length = 0;
+        if (length > 8) // as documented in tunnel.html
+            length = 8;
         /*
         if ( (ctx.tunnelManager().getOutboundTunnelCount() <= 0) || 
              (ctx.tunnelManager().getFreeTunnelCount() <= 0) ) {
-- 
GitLab