You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2020/12/12 23:08:53 UTC

svn commit: r1884366 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java

Author: msahyoun
Date: Sat Dec 12 23:08:52 2020
New Revision: 1884366

URL: http://svn.apache.org/viewvc?rev=1884366&view=rev
Log:
PDFBOX-3891: avoid UnsupportedOperationException by creating fields from scratch

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java?rev=1884366&r1=1884365&r2=1884366&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java Sat Dec 12 23:08:52 2020
@@ -17,6 +17,7 @@
 package org.apache.pdfbox.pdmodel.fixup.processor;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -79,7 +80,7 @@ public class AcroFormOrphanWidgetsProces
 
         LOG.debug("rebuilding fields from widgets");
 
-        List<PDField> fields = acroForm.getFields();
+        List<PDField> fields = new ArrayList<>();
 
         for (PDPage page : document.getPages())
         {
@@ -125,7 +126,11 @@ public class AcroFormOrphanWidgetsProces
                 }
                 else
                 {
-                    fields.add(PDFieldFactory.createField(acroForm, annot.getCOSObject(), null));
+                    PDField field = PDFieldFactory.createField(acroForm, annot.getCOSObject(), null);
+                    if (field != null)
+                    {
+                        fields.add(field);
+                    }
                 }
             }
         }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java?rev=1884366&r1=1884365&r2=1884366&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormFromAnnotsTest.java Sat Dec 12 23:08:52 2020
@@ -16,6 +16,7 @@
  */
 package org.apache.pdfbox.pdmodel.interactive.form;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -283,6 +284,25 @@ class PDAcroFormFromAnnotsTest
         }
     }
 
+    /**
+     * PDFBOX-3891 null PDFieldFactory.createField 
+     * 
+     * @throws IOException
+     */
+    @Test
+    void testFromAnnots3891NullField() throws IOException
+    {
+        String sourceUrl = "https://issues.apache.org/jira/secure/attachment/13016993/poppler-14433-0.pdf";
+
+        try (PDDocument testPdf = Loader.loadPDF(new URL(sourceUrl).openStream()))
+        {
+            PDDocumentCatalog catalog = testPdf.getDocumentCatalog();
+            assertDoesNotThrow(() -> catalog.getAcroForm(new CreateFieldsFixup(testPdf)), "Getting the AcroForm shall not throw an exception");
+        }
+    }
+
+
+
     /*
      * Create fields from widget annotations
      */