diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
index 86c8d6d15..a0ef6bba2 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
@@ -2,9 +2,9 @@ package org.dromara.hutool.core.array;
import org.dromara.hutool.core.collection.iter.ArrayIter;
import org.dromara.hutool.core.convert.Convert;
-import org.dromara.hutool.core.exception.HutoolException;
import org.dromara.hutool.core.func.Wrapper;
import org.dromara.hutool.core.lang.Assert;
+import org.dromara.hutool.core.lang.Validator;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.util.ObjUtil;
@@ -294,10 +294,8 @@ public class ArrayWrapper implements Wrapper, Iterable {
if (index < this.length) {
Array.set(array, index, value);
} else {
- // issue#3286, 增加安全检查,最多增加2倍
- if(index > (length + 1) * 2) {
- throw new HutoolException("Index is too large:", index);
- }
+ // issue#3286, 增加安全检查,最多增加10倍
+ Validator.checkIndexLimit(index, this.length);
for (int i = length; i < index; i++) {
append(paddingElement);
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
index e66d65591..c6ea10499 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
@@ -20,8 +20,8 @@ import org.dromara.hutool.core.collection.partition.RandomAccessAvgPartition;
import org.dromara.hutool.core.collection.partition.RandomAccessPartition;
import org.dromara.hutool.core.comparator.PinyinComparator;
import org.dromara.hutool.core.comparator.PropertyComparator;
-import org.dromara.hutool.core.exception.HutoolException;
import org.dromara.hutool.core.lang.Assert;
+import org.dromara.hutool.core.lang.Validator;
import org.dromara.hutool.core.lang.page.PageInfo;
import org.dromara.hutool.core.util.ObjUtil;
@@ -477,10 +477,8 @@ public class ListUtil {
if (index < size) {
list.set(index, element);
} else {
- // issue#3286, 增加安全检查,最多增加2倍
- if(index > (list.size() + 1) * 2) {
- throw new HutoolException("Index is too large:", index);
- }
+ // issue#3286, 增加安全检查,最多增加10倍
+ Validator.checkIndexLimit(index, size);
for (int i = size; i < index; i++) {
list.add(paddingElement);
}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
index ac0a5e733..a4c73c3de 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
@@ -12,17 +12,17 @@
package org.dromara.hutool.core.lang;
+import org.dromara.hutool.core.data.CreditCodeUtil;
+import org.dromara.hutool.core.data.IdcardUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.exception.ValidateException;
-import org.dromara.hutool.core.regex.PatternPool;
-import org.dromara.hutool.core.regex.RegexPool;
-import org.dromara.hutool.core.util.CharsetUtil;
-import org.dromara.hutool.core.data.CreditCodeUtil;
import org.dromara.hutool.core.math.NumberUtil;
-import org.dromara.hutool.core.util.ObjUtil;
+import org.dromara.hutool.core.regex.PatternPool;
import org.dromara.hutool.core.regex.ReUtil;
+import org.dromara.hutool.core.regex.RegexPool;
import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.core.data.IdcardUtil;
+import org.dromara.hutool.core.util.CharsetUtil;
+import org.dromara.hutool.core.util.ObjUtil;
import java.net.MalformedURLException;
import java.nio.charset.Charset;
@@ -1239,4 +1239,23 @@ public class Validator {
throw new ValidateException(errorMsg);
}
}
+
+ /**
+ * 检查给定的index是否超出长度限制,默认检查超出倍数(10倍),此方法主要用于内部,检查包括:
+ *
+ * - 数组调用setOrPadding时,最多允许padding的长度
+ * - List调用setOrPadding时,最多允许padding的长度
+ * - JSONArray调用setOrPadding时,最多允许padding的长度
+ *
+ *
+ * @param index 索引
+ * @param size 数组、列表长度
+ * @since 6.0.0
+ */
+ 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-core/src/test/java/org/dromara/hutool/core/io/ClassPathResourceTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/io/ClassPathResourceTest.java
index bc9d5da34..6ffa22734 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/io/ClassPathResourceTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/io/ClassPathResourceTest.java
@@ -41,7 +41,7 @@ public class ClassPathResourceTest {
// 读取classpath根目录测试
final ClassPathResource resource = new ClassPathResource("/");
final String content = resource.readUtf8Str();
- Assertions.assertTrue(StrUtil.isEmpty(content));
+ Assertions.assertNotNull(content);
}
@Test
diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java b/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
index 25b321d9b..704c63406 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
@@ -15,6 +15,7 @@ package org.dromara.hutool.json;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.convert.impl.ArrayConverter;
+import org.dromara.hutool.core.lang.Validator;
import org.dromara.hutool.core.lang.mutable.Mutable;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.lang.mutable.MutableObj;
@@ -25,12 +26,7 @@ import org.dromara.hutool.json.writer.JSONWriter;
import java.io.StringWriter;
import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.RandomAccess;
+import java.util.*;
import java.util.function.Predicate;
/**
@@ -456,7 +452,15 @@ public class JSONArray implements JSON, JSONGetter, List