Author: tilman
Date: Fri Apr  3 20:07:25 2026
New Revision: 1932830

Log:
PDFBOX-6186: avoid NPE + test

Modified:
   
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java
   pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
   
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
   pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPage.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java
  Fri Apr  3 20:07:20 2026        (r1932829)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java
  Fri Apr  3 20:07:25 2026        (r1932830)
@@ -238,6 +238,11 @@ public class PDDocumentCatalog implement
      */
     public void setThreads(List<PDThread> threads)
     {
+        if (threads == null)
+        {
+            root.removeItem(COSName.THREADS);
+            return;
+        }
         COSArray threadsArray = new COSArray(threads);
         threadsArray.setDirect(false);
         root.setItem(COSName.THREADS, threadsArray);

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java     
Fri Apr  3 20:07:20 2026        (r1932829)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java     
Fri Apr  3 20:07:25 2026        (r1932830)
@@ -685,6 +685,11 @@ public class PDPage implements COSObject
      */
     public void setThreadBeads(List<PDThreadBead> beads)
     {
+        if (beads == null)
+        {
+            page.removeItem(COSName.B);
+            return;
+        }
         page.setItem(COSName.B, new COSArray(beads));
     }
 

Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
      Fri Apr  3 20:07:20 2026        (r1932829)
+++ 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
      Fri Apr  3 20:07:25 2026        (r1932830)
@@ -18,6 +18,7 @@ package org.apache.pdfbox.pdmodel;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.pdfbox.Loader;
@@ -164,4 +165,19 @@ class TestPDDocumentCatalog
             assertNull(doc.getDocumentCatalog().getOpenAction());
         }
     }
+    
+    @Test
+    void testNullThreads() throws IOException
+    {
+        // PDFBOX-6186
+        try (PDDocument doc = new PDDocument())
+        {
+            PDDocumentCatalog documentCatalog = doc.getDocumentCatalog();
+            assertEquals(0, documentCatalog.getThreads().size());
+            documentCatalog.setThreads(new ArrayList<>());
+            assertEquals(0, documentCatalog.getThreads().size());
+            documentCatalog.setThreads(null);
+            assertEquals(0, documentCatalog.getThreads().size());
+        }
+   }
 }

Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPage.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPage.java 
Fri Apr  3 20:07:20 2026        (r1932829)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPage.java 
Fri Apr  3 20:07:25 2026        (r1932830)
@@ -18,23 +18,22 @@ package org.apache.pdfbox.pdmodel;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
 import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
 import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.junit.jupiter.api.Test;
 
-/**
- * Test case introduced with PDFBOX-6097
- * 
- */
 class TestPDPage
 {
     @Test
     void testAddingPageAfterCreatingAnnotation() throws IOException
     {
+        // PDFBOX-6097
         try (PDDocument document = new PDDocument())
         {
             PDPage page = new PDPage(PDRectangle.A4);
@@ -58,5 +57,19 @@ class TestPDPage
             document.close();
         }
     }
-
+    
+    @Test
+    void testNullThreadBeads() throws IOException
+    {
+        // PDFBOX-6186
+        try (PDDocument document = new PDDocument())
+        {
+            PDPage page = new PDPage();
+            assertEquals(0, page.getThreadBeads().size());
+            page.setThreadBeads(new ArrayList<>());
+            assertEquals(0, page.getThreadBeads().size());
+            page.setThreadBeads(null);
+            assertEquals(0, page.getThreadBeads().size());
+        }
+    }
 }

Reply via email to