From 07ef3582f782960ef6699e559aa9c0d376e6fc33 Mon Sep 17 00:00:00 2001
From: jrandom <jrandom>
Date: Sun, 29 Aug 2004 22:42:21 +0000
Subject: [PATCH] clarify the nextInt/nextLong boundaries (thanks oOo)

---
 .../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java   | 2 --
 core/java/src/net/i2p/util/RandomSource.java              | 8 ++++----
 .../i2p/router/networkdb/kademlia/DataPublisherJob.java   | 2 +-
 .../i2p/router/tunnelmanager/TunnelPoolManagerJob.java    | 4 ++--
 4 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
index 728cbe3270..d0735c9d5d 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
@@ -138,8 +138,6 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
                 return null;
             }
             int index = I2PAppContext.getGlobalContext().random().nextInt(size);
-            if (index >= size) index = size - 1;
-            if (index < 0) return null;
             String proxy = (String)proxyList.get(index);
             return proxy;
         }
diff --git a/core/java/src/net/i2p/util/RandomSource.java b/core/java/src/net/i2p/util/RandomSource.java
index 473fda1ca7..f5508203f3 100644
--- a/core/java/src/net/i2p/util/RandomSource.java
+++ b/core/java/src/net/i2p/util/RandomSource.java
@@ -33,7 +33,7 @@ public class RandomSource extends SecureRandom {
      * According to the java docs (http://java.sun.com/j2se/1.4.1/docs/api/java/util/Random.html#nextInt(int))
      * nextInt(n) should return a number between 0 and n (including 0 and excluding n).  However, their pseudocode,
      * as well as sun's, kaffe's, and classpath's implementation INCLUDES NEGATIVE VALUES.
-     * WTF.  Ok, so we're going to have it return between 0 and n, since 
+     * WTF.  Ok, so we're going to have it return between 0 and n (including 0, excluding n), since 
      * thats what it has been used for.
      *
      */
@@ -41,18 +41,18 @@ public class RandomSource extends SecureRandom {
         if (n == 0) return 0;
         int val = super.nextInt(n);
         if (val < 0) val = 0 - val;
-        if (val > n) val = val % n;
+        if (val >= n) val = val % n;
         return val;
     }
 
     /**
      * Like the modified nextInt, nextLong(n) returns a random number from 0 through n,
-     * inclusive.
+     * including 0, excluding n.
      */
     public long nextLong(long n) {
         long v = super.nextLong();
         if (v < 0) v = 0 - v;
-        if (v > n) v = v % n;
+        if (v >= n) v = v % n;
         return v;
     }
 
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/DataPublisherJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/DataPublisherJob.java
index 38bccd48ba..293e291336 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/DataPublisherJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/DataPublisherJob.java
@@ -67,7 +67,7 @@ class DataPublisherJob extends JobImpl {
         
         // if there's nothing we *need* to send, only send 10% of the time
         if (explicit.size() <= 0) {
-            if (getContext().random().nextInt(9) <= 8)
+            if (getContext().random().nextInt(10) > 0)
                 return toSend;
         }
         
diff --git a/router/java/src/net/i2p/router/tunnelmanager/TunnelPoolManagerJob.java b/router/java/src/net/i2p/router/tunnelmanager/TunnelPoolManagerJob.java
index 5b1a49304c..a0c30e85aa 100644
--- a/router/java/src/net/i2p/router/tunnelmanager/TunnelPoolManagerJob.java
+++ b/router/java/src/net/i2p/router/tunnelmanager/TunnelPoolManagerJob.java
@@ -71,7 +71,7 @@ class TunnelPoolManagerJob extends JobImpl {
                 built = true;
             } else {
                 // 10% chance of building a new tunnel
-                if (getContext().random().nextInt(9) > 0) {
+                if (getContext().random().nextInt(10) > 0) {
                     // all good, no need for more inbound tunnels
                     if (_log.shouldLog(Log.DEBUG))
                         _log.debug("Sufficient inbound tunnels (" + curFreeInboundTunnels + ")");
@@ -93,7 +93,7 @@ class TunnelPoolManagerJob extends JobImpl {
                 built = true;
             } else {
                 // 10% chance of building a new tunnel
-                if (getContext().random().nextInt(9) > 0) {
+                if (getContext().random().nextInt(10) > 0) {
                     // all good, no need for more outbound tunnels
                     if (_log.shouldLog(Log.DEBUG))
                         _log.debug("Sufficient outbound tunnels (" + curOutboundTunnels + ")");
-- 
GitLab