chinabugotech/hutool · warning · ValidateException

Index [ ] is too large for limit: [ ]

Error message

Index [{}] is too large for limit: [{}]

What it means

Thrown by ListUtil.setOrPadding() when the target index exceeds the specified indexLimit. This method sets an element at a given index, padding with paddingElement if the index is beyond the current list size. The indexLimit parameter (when > 0) acts as a safety cap to prevent unbounded list growth. If index > indexLimit, a ValidateException is thrown.

Solutions

  1. Validate the index is within the expected range before calling setOrPadding().
  2. Increase the indexLimit to accommodate the expected maximum index.
  3. Pass indexLimit <= 0 to disable the limit check entirely (use with caution).
  4. Catch ValidateException and report the index as out of allowed range.

Example fix

// before
ListUtil.setOrPadding(list, 1000, value, null, 100); // throws — 1000 > 100

// after
int maxIndex = 1000;
if (index > maxIndex) throw new IllegalArgumentException("Index out of range: " + index);
ListUtil.setOrPadding(list, index, value, null, maxIndex);
Defensive patterns

Strategy: validation

Validate before calling

if (indexLimit > 0 && index > indexLimit) {
    throw new IllegalArgumentException("Index " + index + " exceeds limit " + indexLimit);
}

Try / catch

try {
    ListUtil.setOrPadding(list, index, element, padding, indexLimit);
} catch (ValidateException e) {
    // index exceeds the configured limit
    throw new IllegalArgumentException("Index out of allowed range", e);
}

Prevention

When it happens

Trigger: Calling ListUtil.setOrPadding(list, index, element, paddingElement, indexLimit) where index >= list.size() AND indexLimit > 0 AND index > indexLimit. For example, setOrPadding(list, 1000, x, null, 100) throws because 1000 > 100. If indexLimit is 0 or negative, the limit check is skipped entirely.

Common situations: User-supplied index values that are unreasonably large. Configuring an indexLimit that is too small for the expected indices. Off-by-one errors in index calculation. This guard was added for issue #3286 as a safety check against unbounded padding.

Related errors


AI-assisted analysis of chinabugotech/hutool@8870454b2a (2026-08-14). Data as JSON: /api/errors/3ae013a020f78c52. Report an issue: GitHub.

Appendix: source

Thrown at hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java:451

	 * @param <T>            元素类型
	 * @param list           List列表
	 * @param index          位置
	 * @param element        新元素
	 * @param paddingElement 填充的值
	 * @param indexLimit     最大索引限制
	 * @return 原List
	 * @since 5.8.28
	 */
	public static <T> List<T> setOrPadding(List<T> list, int index, T element, T paddingElement, int indexLimit) {
		Assert.notNull(list, "List must be not null !");
		final int size = list.size();
		if (index < size) {
			list.set(index, element);
		} else {
			if (indexLimit > 0) {
				// issue#3286, 增加安全检查
				if (index > indexLimit) {
					throw new ValidateException("Index [{}] is too large for limit: [{}]", index, indexLimit);
				}
			}
			for (int i = size; i < index; i++) {
				list.add(paddingElement);
			}
			list.add(element);
		}
		return list;
	}

	/**
	 * 截取集合的部分
	 *
	 * @param <T>   集合元素类型
	 * @param list  被截取的数组
	 * @param start 开始位置(包含)
	 * @param end   结束位置(不包含)
	 * @return 截取后的数组,当开始位置超过最大时,返回空的List

View on GitHub (pinned to 8870454b2a)