From 606d212de18b86c8f03a4a22ef2eecbf1594fabc Mon Sep 17 00:00:00 2001 From: shad0wm00n Date: Thu, 25 Dec 2025 10:42:51 +0800 Subject: [PATCH 1/2] fix issue IDFPGR --- .../main/java/cn/hutool/core/util/RadixUtil.java | 12 +++++++++++- .../java/cn/hutool/core/util/RadixUtilTest.java | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java diff --git a/hutool-core/src/main/java/cn/hutool/core/util/RadixUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/RadixUtil.java index 3185058890..4b1c61dfcc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/RadixUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/RadixUtil.java @@ -92,12 +92,22 @@ public class RadixUtil { * @return long */ public static long decode(String radixs, String encodeStr) { + if (radixs == null || radixs.length() < 2) { + throw new IllegalArgumentException("radixs must contain at least 2 characters"); + } + if (encodeStr == null || encodeStr.isEmpty()) { + throw new IllegalArgumentException("encodeStr is null or empty"); + } //目标是多少进制 int rl = radixs.length(); long res = 0L; for (char c : encodeStr.toCharArray()) { - res = res * rl + radixs.indexOf(c); + int idx = radixs.indexOf(c); + if (idx < 0) { + throw new IllegalArgumentException("Illegal character '" + c + "' for radixs"); + } + res = res * rl + idx; } return res; } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java new file mode 100644 index 0000000000..d2acbde40b --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java @@ -0,0 +1,15 @@ +package cn.hutool.core.util; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class RadixUtilTest { + @Test + public void issueTest() { + String radixs = "0123456789ABC"; // base 13 + String bad = "1X3"; // 'X' 不在 radix 中 + assertThrows(IllegalArgumentException.class, () -> { + RadixUtil.decode(radixs, bad); + }); + } +} From 56ce21562d275d88a7c36f5527247d8313f78b6c Mon Sep 17 00:00:00 2001 From: shad0wm00n Date: Thu, 25 Dec 2025 10:45:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=20issue=20IDFPGR=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/cn/hutool/core/util/RadixUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java index d2acbde40b..3de1a5274a 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/RadixUtilTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; public class RadixUtilTest { @Test - public void issueTest() { + public void issueIDFPGRTest() { String radixs = "0123456789ABC"; // base 13 String bad = "1X3"; // 'X' 不在 radix 中 assertThrows(IllegalArgumentException.class, () -> {