diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java index 81404e904d2..79e274a924d 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java @@ -309,6 +309,7 @@ private COSDictionary get(int pageNum, COSDictionary node, int encountered) { if (pageNum < 1) { + pageSet.clear(); throw new IndexOutOfBoundsException("Index out of bounds: " + pageNum); } if (pageSet.contains(node)) @@ -357,10 +358,12 @@ private COSDictionary get(int pageNum, COSDictionary node, int encountered) } } + pageSet.clear(); throw new IllegalStateException("1-based index not found: " + pageNum); } else { + pageSet.clear(); throw new IndexOutOfBoundsException("1-based index out of bounds: " + pageNum); } } @@ -373,6 +376,7 @@ private COSDictionary get(int pageNum, COSDictionary node, int encountered) } else { + pageSet.clear(); throw new IllegalStateException("1-based index not found: " + pageNum); } } diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPageTree.java b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPageTree.java index 0dbe00a6022..5378e44763a 100644 --- a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPageTree.java +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPageTree.java @@ -18,6 +18,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.IOException; @@ -133,6 +135,20 @@ void testInsertAfterBlankPage() throws IOException } } + @Test + void getValidPageAfterOutOfBoundsLookup() throws IOException + { + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(); + document.addPage(page); + PDPageTree pages = document.getPages(); + + assertThrows(IndexOutOfBoundsException.class, () -> pages.get(1)); + assertSame(page.getCOSObject(), pages.get(0).getCOSObject()); + } + } + /** * PDFBOX-6040: avoid loop in getInheritableAttribute(). *