Hello [email protected], This is not a bug. The TreeListIterator class is package-private and can only be built in client code from the public method TreeList.listIterator(int), which performs argument checks and throws IndexOutOfBoundsException.
Can you make this happen from client code? IOW, code that doesn't reside in the Commons Collection namespace? Please see the new test org.apache.commons.collections4.list.TreeListTest.testTreeListIteratorConstruction() in git master. Nevertheless, I've moved the argument checking into the constructor for clarity. Was this AI-generated? Fuzzed? Thank you, Gary On Thu, Jan 15, 2026 at 11:58 AM A A <[email protected]> wrote: > > *Version:* > commons-collections-4.5.0 > > *Description:* > > In org.apache.commons.collections4.list.TreeList$TreeListIterator.previous( > TreeList.java:863). > > The next reference is not checked for null before calling getValue(), which > can result in a NullPointerException. > > ```java > @Override > public E previous() { > checkModCount(); > if (!hasPrevious()) { > throw new NoSuchElementException("Already at start of list."); > } > if (next == null) { > next = parent.root.get(nextIndex - 1); > } else { > next = next.previous(); > } > final E value = next.getValue(); // NPE ! > current = next; > currentIndex = --nextIndex; > return value; > } > ``` > > *Step to reproduce:* > > Test Code: > ```java > package org.apache.commons.collections4.list; > import org.junit.Test; > import org.apache.commons.collections4.list.TreeList; > import java.time.format.TextStyle; > import java.util.NoSuchElementException; > > public class TestClass { > @Test(timeout=3000) > public void test() throws Throwable { > TreeList<TextStyle> treeList0 = new TreeList<TextStyle>(); > treeList0.add(TextStyle.FULL); > treeList0.add(TextStyle.SHORT); > TreeList.TreeListIterator<TextStyle> treeList_TreeListIterator0 = new > TreeList.TreeListIterator<TextStyle>(treeList0, 3); > treeList_TreeListIterator0.previous(); > > } > } > ``` > > Execution Result: > ``` > JUnit version 4.12 > .E > Time: 0.016 > There was 1 failure: > 1) test(org.apache.commons.collections4.list.TestClass) > java.lang.NullPointerException > at org.apache.commons.collections4.list.TreeList$TreeListIterator.previous( > TreeList.java:863) > at org.apache.commons.collections4.list.TestClass.test(TestClass.java:15) > > FAILURES!!! > Tests run: 1, Failures: 1 > ``` > > Environment: > ``` > Apache Maven 3.9.1 > Java version: 1.8.0_452, vendor: Private Build, runtime: > /usr/lib/jvm/java-8-openjdk-amd64/jre > Default locale: en, platform encoding: UTF-8 > OS name: "linux", version: "5.15.0-138-generic", arch: "amd64", family: > "unix" > ``` --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
