[ 
https://issues.apache.org/jira/browse/PDFBOX-6271?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tilman Hausherr resolved PDFBOX-6271.
-------------------------------------
      Assignee: Tilman Hausherr
    Resolution: Fixed

Thank you, I've fixed it as suggested and also used your test. I've changed 2.0 
as well although the bug doesn't occur there, so that the code is the same.

> `getNormalAppearanceStream` marks annotation appearance stream as dirty
> -----------------------------------------------------------------------
>
>                 Key: PDFBOX-6271
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-6271
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel
>    Affects Versions: 3.0.6 PDFBox
>            Reporter: Jakob Heher
>            Assignee: Tilman Hausherr
>            Priority: Major
>             Fix For: 2.0.38, 3.0.9 PDFBox, 4.0.0
>
>         Attachments: Repro2FormXObjectConstructor.java, double-signed.pdf
>
>
> Calling `getNormalAppearanceStream` on an annotation marks the appearance 
> stream as dirty. This causes it to be re-emitted in a subsequent incremental 
> update save.
> In particular, PDFRenderer's `renderPageToGraphics` can also trigger this bug 
> down-stack (which is how we ran into it; we render the document page to 
> determine where to place a subsequent signature annotation, and the previous 
> signature annotation's appearance stream was re-emitted).
> The cause is that the `PDXObject` constructor taking `COSStream` (which the 
> `PDFormXObject` constructor delegates to) unconditionally calls `setName` -> 
> `setItem` to set the correct type/subtype values. `setItem` then 
> unconditionally marks the dictionary as dirty. This is the same fundamental 
> cause as PDFBOX-6270.
> A minimal reproducer is attached. A sample PDF file exhibiting this bug is 
> also attached.
> A suggested fix would be to make the `setItem` invocations conditional. This 
> likely applies to more than just PDFormXObject, it is just the context in 
> which we encountered the bug.
> *AI disclaimer:* I used ChatGPT to perform the cause analysis after noticing 
> the erroneous behavior in production, and to generate an initial reproducer. 
> However, I have manually refined the reproducer, and have manually verified 
> the erroneous behavior in the source tree. I have written this bug report by 
> hand. I am confident that this is a real bug.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to