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()); + } }