You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2015/07/15 21:37:18 UTC

svn commit: r1691261 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form: PDAcroForm.java PDField.java PDFieldFactory.java PDNonTerminalField.java

Author: jahewson
Date: Wed Jul 15 19:37:17 2015
New Revision: 1691261

URL: http://svn.apache.org/r1691261
Log:
PDFBOX-2885: Handle erroneous non-field objects in AcroForms

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1691261&r1=1691260&r2=1691261&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java Wed Jul 15 19:37:17 2015
@@ -173,7 +173,10 @@ public final class PDAcroForm implements
             if (element != null)
             {
                 PDField field = PDField.fromDictionary(this, element, null);
-                pdFields.add(field);
+                if (field != null)
+                {
+                    pdFields.add(field);
+                }
             }
         }
         return new COSArrayList<PDField>(pdFields, cosFields);
@@ -256,23 +259,25 @@ public final class PDAcroForm implements
                         fieldName.getString().equals(nameSubSection[0]))
                     {
                         PDField root = PDField.fromDictionary(this, element, null);
-
-                        if (nameSubSection.length > 1)
+                        if (root != null)
                         {
-                            PDField kid = root.findKid(nameSubSection, 1);
-                            if (kid != null)
+                            if (nameSubSection.length > 1)
                             {
-                                retval = kid;
+                                PDField kid = root.findKid(nameSubSection, 1);
+                                if (kid != null)
+                                {
+                                    retval = kid;
+                                }
+                                else
+                                {
+                                    retval = root;
+                                }
                             }
                             else
                             {
                                 retval = root;
                             }
                         }
-                        else
-                        {
-                            retval = root;
-                        }
                     }
                 }
             }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java?rev=1691261&r1=1691260&r2=1691261&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java Wed Jul 15 19:37:17 2015
@@ -289,7 +289,7 @@ public abstract class PDField implements
                 {
                     retval = PDField.fromDictionary(acroForm, kidDictionary,
                                                     (PDNonTerminalField)this);
-                    if (name.length > nameIndex + 1)
+                    if (retval != null && name.length > nameIndex + 1)
                     {
                         retval = retval.findKid(name, nameIndex + 1);
                     }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java?rev=1691261&r1=1691260&r2=1691261&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java Wed Jul 15 19:37:17 2015
@@ -61,10 +61,15 @@ final class PDFieldFactory
         {
             return createButtonSubType(form, field, parent);
         }
-        else
+        else if (field.containsKey(COSName.KIDS))
         {
             return new PDNonTerminalField(form, field, parent);
         }
+        else
+        {
+            // an erroneous non-field object, see PDFBOX-2885
+            return null;
+        }
     }
 
     private static PDField createChoiceSubType(PDAcroForm form, COSDictionary field,

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java?rev=1691261&r1=1691260&r2=1691261&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java Wed Jul 15 19:37:17 2015
@@ -130,7 +130,10 @@ public class PDNonTerminalField extends
         for (int i = 0; i < kids.size(); i++)
         {
             PDField field = PDField.fromDictionary(acroForm, (COSDictionary)kids.getObject(i), this);
-            children.add(field);
+            if (field != null)
+            {
+                children.add(field);
+            }
         }
         return children;
     }