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;
}