Skip to content

Commit 329e4f0

Browse files
committed
PDFBOX-6186: avoid NPE + test
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1932830 13f79535-47bb-0310-9956-ffa450edef68
1 parent 06e2344 commit 329e4f0

4 files changed

Lines changed: 44 additions & 5 deletions

File tree

pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,11 @@ public List<PDThread> getThreads()
238238
*/
239239
public void setThreads(List<PDThread> threads)
240240
{
241+
if (threads == null)
242+
{
243+
root.removeItem(COSName.THREADS);
244+
return;
245+
}
241246
COSArray threadsArray = new COSArray(threads);
242247
threadsArray.setDirect(false);
243248
root.setItem(COSName.THREADS, threadsArray);

pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,11 @@ public List<PDThreadBead> getThreadBeads()
685685
*/
686686
public void setThreadBeads(List<PDThreadBead> beads)
687687
{
688+
if (beads == null)
689+
{
690+
page.removeItem(COSName.B);
691+
return;
692+
}
688693
page.setItem(COSName.B, new COSArray(beads));
689694
}
690695

pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.IOException;
2020
import java.io.InputStream;
21+
import java.util.ArrayList;
2122
import java.util.List;
2223

2324
import org.apache.pdfbox.Loader;
@@ -164,4 +165,19 @@ void handleBooleanInOpenAction() throws IOException
164165
assertNull(doc.getDocumentCatalog().getOpenAction());
165166
}
166167
}
168+
169+
@Test
170+
void testNullThreads() throws IOException
171+
{
172+
// PDFBOX-6186
173+
try (PDDocument doc = new PDDocument())
174+
{
175+
PDDocumentCatalog documentCatalog = doc.getDocumentCatalog();
176+
assertEquals(0, documentCatalog.getThreads().size());
177+
documentCatalog.setThreads(new ArrayList<>());
178+
assertEquals(0, documentCatalog.getThreads().size());
179+
documentCatalog.setThreads(null);
180+
assertEquals(0, documentCatalog.getThreads().size());
181+
}
182+
}
167183
}

pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPage.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,22 @@
1818

1919
import java.io.ByteArrayOutputStream;
2020
import java.io.IOException;
21+
import java.util.ArrayList;
2122

2223
import org.apache.pdfbox.pdmodel.common.PDRectangle;
2324
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
2425
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
2526
import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
27+
import static org.junit.jupiter.api.Assertions.assertEquals;
2628

2729
import org.junit.jupiter.api.Test;
2830

29-
/**
30-
* Test case introduced with PDFBOX-6097
31-
*
32-
*/
3331
class TestPDPage
3432
{
3533
@Test
3634
void testAddingPageAfterCreatingAnnotation() throws IOException
3735
{
36+
// PDFBOX-6097
3837
try (PDDocument document = new PDDocument())
3938
{
4039
PDPage page = new PDPage(PDRectangle.A4);
@@ -58,5 +57,19 @@ void testAddingPageAfterCreatingAnnotation() throws IOException
5857
document.close();
5958
}
6059
}
61-
60+
61+
@Test
62+
void testNullThreadBeads() throws IOException
63+
{
64+
// PDFBOX-6186
65+
try (PDDocument document = new PDDocument())
66+
{
67+
PDPage page = new PDPage();
68+
assertEquals(0, page.getThreadBeads().size());
69+
page.setThreadBeads(new ArrayList<>());
70+
assertEquals(0, page.getThreadBeads().size());
71+
page.setThreadBeads(null);
72+
assertEquals(0, page.getThreadBeads().size());
73+
}
74+
}
6275
}

0 commit comments

Comments
 (0)