diff --git a/CHANGELOG.md b/CHANGELOG.md
index d91d38a88..188c3828b 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
-# 5.8.22(2023-09-01)
+# 5.8.22(2023-09-05)
### 🐣新特性
* 【core 】 NumberUtil.nullToZero增加重载(issue#I7PPD2@Gitee)
@@ -30,6 +30,7 @@
* 【core 】 修复fillColumns空指针问题(issue#3284@Github)
* 【core 】 修复Convert不能转换Optional和Opt问题(issue#I7WJHH@Gitee)
* 【core 】 修复DateUtil.age年龄计算问题(issue#I7XMYW@Gitee)
+* 【core 】 修复JSONUtil.parse()溢出问题(issue#3289@Github)
-------------------------------------------------------------------------------------------------------------
# 5.8.21(2023-07-29)
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
index a4f5ccda3..829a5b147 100755
--- a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
@@ -5,6 +5,7 @@ import cn.hutool.core.comparator.PropertyComparator;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Matcher;
+import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PageUtil;
@@ -432,10 +433,8 @@ public class ListUtil {
if (index < size) {
list.set(index, element);
} else {
- // issue#3286, 增加安全检查,最多增加2倍
- if(index > (list.size() + 1) * 2) {
- throw new UtilException("Index is too large:", index);
- }
+ // issue#3286, 增加安全检查,最多增加10倍
+ Validator.checkIndexLimit(index, list.size());
for (int i = size; i < index; i++) {
list.add(paddingElement);
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java
index 54f39209f..5551832ff 100755
--- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java
@@ -1257,4 +1257,23 @@ public class Validator {
}
return value;
}
+
+ /**
+ * 检查给定的index是否超出长度限制,默认检查超出倍数(10倍),此方法主要用于内部,检查包括:
+ *
+ * - 数组调用setOrPadding时,最多允许padding的长度
+ * - List调用setOrPadding时,最多允许padding的长度
+ * - JSONArray调用setOrPadding时,最多允许padding的长度
+ *
+ *
+ * @param index 索引
+ * @param size 数组、列表长度
+ * @since 5.8.22
+ */
+ public static void checkIndexLimit(final int index, final int size) {
+ // issue#3286, 增加安全检查,最多增加10倍
+ if (index > (size + 1) * 10) {
+ throw new ValidateException("Index [{}] is too large for size: [{}]", index, size);
+ }
+ }
}
diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java
index 6669cd5d0..f567b043d 100755
--- a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java
+++ b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java
@@ -3,6 +3,7 @@ package cn.hutool.json;
import cn.hutool.core.bean.BeanPath;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Filter;
+import cn.hutool.core.lang.Validator;
import cn.hutool.core.lang.mutable.Mutable;
import cn.hutool.core.lang.mutable.MutableObj;
import cn.hutool.core.lang.mutable.MutablePair;
@@ -457,10 +458,8 @@ public class JSONArray implements JSON, JSONGetter, List