You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2017/01/26 15:54:25 UTC

[jira] [Commented] (PDFBOX-3663) NullPointerException when signing a PDF with AcroForm and no fields

    [ https://issues.apache.org/jira/browse/PDFBOX-3663?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15839901#comment-15839901 ] 

ASF subversion and git services commented on PDFBOX-3663:
---------------------------------------------------------

Commit 1780412 from [~tilman] in branch 'pdfbox/branches/2.0'
[ https://svn.apache.org/r1780412 ]

PDFBOX-3663: avoid NPE if /AcroForm exists without /Fields

> NullPointerException when signing a PDF with AcroForm and no fields
> -------------------------------------------------------------------
>
>                 Key: PDFBOX-3663
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3663
>             Project: PDFBox
>          Issue Type: Bug
>          Components: AcroForm
>    Affects Versions: 2.1.0
>            Reporter: Moritz Orth
>            Assignee: Tilman Hausherr
>
> This is related to PDFBOX-1719. The workaround made there calls PDAcroForm.setFields with an empty list when the acro form has no fields:
> {code:title=PDDocument.java (Line 286)|borderStyle=solid}
> List<PDField> fields = acroForm.getFields();
> if (fields == null)
> {
>     fields = new ArrayList<PDField>();
>     acroForm.setFields(fields);
> }
> else
> {
>     COSArray fieldArray = (COSArray) acroForm.getCOSObject().getDictionaryObject(COSName.FIELDS);
>     fieldArray.setNeedToBeUpdated(true);
> }
> {code}
> This doesn't work anymore because PDAcroFrom.getFields never returns null in the current version, instead it returns an empty list and a NPE raises in line 295.
> The source of the problem seems to be that the PDAcroForm's dictionary's COSName.FIELDS field contains null instead of an empty array. An empty array is implicitly created when calling PDAcroForm.setFields with an empty list. The PDAcroForm(PDDocument) constructor also sets an empty COSArray for the field. You could also do this in the second constrcutor, that would fix the error:
> {code:title=PDAcroForm.java|borderStyle=solid}
> public PDAcroForm(PDDocument doc, COSDictionary form)
> {
>     document = doc;
>     dictionary = form;
>     if (dictionary.getItem(COSName.FIELDS) == null)
>     {
>       dictionary.setItem(COSName.FIELDS, new COSArray());
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org