From 464a39b939440ffe1ea6ef46f5940f7518265da2 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 19 Dec 2021 10:53:50 -0500 Subject: [PATCH] MaskedIPSet: More efficient string generation and don't IAE on 8 byte negative value --- router/java/src/net/i2p/router/util/MaskedIPSet.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/router/java/src/net/i2p/router/util/MaskedIPSet.java b/router/java/src/net/i2p/router/util/MaskedIPSet.java index c7ff44d5d..cfaa2fb67 100644 --- a/router/java/src/net/i2p/router/util/MaskedIPSet.java +++ b/router/java/src/net/i2p/router/util/MaskedIPSet.java @@ -116,7 +116,6 @@ public class MaskedIPSet extends HashSet { * @param mask is 1-4 (number of bytes to match) */ private static String maskedIP(byte[] ip, int mask) { - final StringBuilder buf = new StringBuilder(1 + (mask*2)); final char delim; if (ip.length == 16) { mask *= 2; @@ -124,8 +123,14 @@ public class MaskedIPSet extends HashSet { } else { delim = '.'; } + final StringBuilder buf = new StringBuilder(1 + (mask*2)); buf.append(delim); - buf.append(Long.toHexString(DataHelper.fromLong(ip, 0, mask))); + for (int i = 0; i < mask; i++) { + // fake hex "0123456789:;<=>?" + byte b = ip[i]; + buf.append('0' + (char) ((b >> 4) & 0x0f)); + buf.append('0' + (char) (b & 0x0f)); + } return buf.toString(); }