From b0eea9f919cc317cc60e842956fd0f731f3e6e8d Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 30 Aug 2023 22:09:12 +0800 Subject: [PATCH] fix code --- .../main/java/org/dromara/hutool/core/bean/BeanUtil.java | 3 ++- .../java/org/dromara/hutool/core/collection/ListUtil.java | 7 ++++++- .../src/main/java/org/dromara/hutool/json/JSONArray.java | 8 +------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java index 41024262e..996733b2b 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java @@ -337,7 +337,8 @@ public class BeanUtil { if (bean instanceof Map) { ((Map) bean).put(fieldNameOrIndex, value); } else if (bean instanceof List) { - ListUtil.setOrPadding((List) bean, Convert.toInt(fieldNameOrIndex), value); + // 相对于5.x逻辑变更,与数组逻辑保持一致 + ListUtil.setOrAppend((List) bean, Convert.toInt(fieldNameOrIndex), value); } else if (ArrayUtil.isArray(bean)) { // issue#3008,追加产生新数组,此处返回新数组 return ArrayUtil.setOrAppend(bean, Convert.toInt(fieldNameOrIndex), value); 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 95eb065b1..e66d65591 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,6 +20,7 @@ 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.page.PageInfo; import org.dromara.hutool.core.util.ObjUtil; @@ -464,7 +465,7 @@ public class ListUtil { * * @param 元素类型 * @param list List列表 - * @param index 位置 + * @param index 位置,不能大于(list.size()+1) * 2 * @param element 新元素 * @param paddingElement 填充的值 * @return 原List @@ -476,6 +477,10 @@ 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); + } for (int i = size; i < index; i++) { list.add(paddingElement); } 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 c8b55b2b0..25b321d9b 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 @@ -456,13 +456,7 @@ public class JSONArray implements JSON, JSONGetter, List, Rando } this.rawList.add(index, InternalJSONUtil.wrap(element, this.config)); } else { - // issue#3286, 如果用户指定的index太大,容易造成Java heap space错误。 -// if (!config.isIgnoreNullValue()) { -// while (index != this.size()) { -// // 非末尾,则填充null -// this.add(null); -// } -// } + // 相对于5.x逻辑变更,当index大于size,则追加,而不是补充null,这样更加安全 this.add(element); }