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