From 52039e220d9b485f9f5fb83e0aa56ced73aaf83a Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 29 Sep 2024 07:12:48 +0000 Subject: [PATCH] [bug-69351] fix issues with removing items from IntList git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921017 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/poi/util/IntList.java | 12 +++++++-- .../java/org/apache/poi/util/TestIntList.java | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/poi/src/main/java/org/apache/poi/util/IntList.java b/poi/src/main/java/org/apache/poi/util/IntList.java index 2c6cc86ae6..8d958d5934 100644 --- a/poi/src/main/java/org/apache/poi/util/IntList.java +++ b/poi/src/main/java/org/apache/poi/util/IntList.java @@ -18,9 +18,9 @@ package org.apache.poi.util; /** - * A List of int's; as full an implementation of the java.util.List + * A List of `int`s; as full an implementation of the java.util.List * interface as possible, with an eye toward minimal creation of - * objects + * objects. * * the mimicry of List is as follows: * + * + * This class is only meant for internal use in Apache POI. */ public class IntList { @@ -434,6 +436,9 @@ public class IntList } int rval = _array[ index ]; + if(_limit == _array.length) { + growArray(_limit + 1); + } System.arraycopy(_array, index + 1, _array, index, _limit - index); _limit--; return rval; @@ -458,6 +463,9 @@ public class IntList if (o == _array[ j ]) { if (j+1 < _limit) { + if(_limit == _array.length) { + growArray(_limit + 1); + } System.arraycopy(_array, j + 1, _array, j, _limit - j); } _limit--; diff --git a/poi/src/test/java/org/apache/poi/util/TestIntList.java b/poi/src/test/java/org/apache/poi/util/TestIntList.java index 4c4317ad0e..6978c7425d 100644 --- a/poi/src/test/java/org/apache/poi/util/TestIntList.java +++ b/poi/src/test/java/org/apache/poi/util/TestIntList.java @@ -510,4 +510,30 @@ final class TestIntList { assertEquals(a5[j], list.get(j)); } } + + @Test + void bug69351() { + final int size = 10; + final IntList list = new IntList(size); + assertEquals(0, list.size()); + for (int i = 0; i < size; i++) { + list.add(i); + } + assertEquals(size, list.size()); + assertTrue(list.removeValue(size - 2)); + assertEquals(size - 1, list.size()); + } + + @Test + void testRemove69351() { + final int size = 10; + final IntList list = new IntList(size); + assertEquals(0, list.size()); + for (int i = 0; i < size; i++) { + list.add(i); + } + assertEquals(size, list.size()); + assertEquals(size - 2, list.remove(size - 2)); + assertEquals(size - 1, list.size()); + } } -- 2.39.5