diff options
author | PJ Fanning <fanningpj@apache.org> | 2024-09-29 07:12:48 +0000 |
---|---|---|
committer | PJ Fanning <fanningpj@apache.org> | 2024-09-29 07:12:48 +0000 |
commit | 52039e220d9b485f9f5fb83e0aa56ced73aaf83a (patch) | |
tree | 8830bd7f14a4e8908cd31b45960eb3656db1636b | |
parent | a3d9bb7e3541e90340aaf6e1265767daf9b51462 (diff) | |
download | poi-52039e220d9b485f9f5fb83e0aa56ced73aaf83a.tar.gz poi-52039e220d9b485f9f5fb83e0aa56ced73aaf83a.zip |
[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
-rw-r--r-- | poi/src/main/java/org/apache/poi/util/IntList.java | 12 | ||||
-rw-r--r-- | poi/src/test/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: * <ul> @@ -40,6 +40,8 @@ package org.apache.poi.util; * remove(int index) * <li> subList is not supported * </ul> + * + * 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()); + } } |