Repository navigation
FreePDF 7.4.1
FreePDF 7.4.1
FreePDF 7.4.1 fixes signing and filling signed forms in Append mode, which
7.4.0 introduced, and opens encrypted files that have incremental updates.
Nothing else changes from 7.4.0.
Packages
io7.FreePDFhttps://www.nuget.org/packages/io7.FreePDF/7.4.1io7.FreePDF.Layouthttps://www.nuget.org/packages/io7.FreePDF.Layout/7.4.1io7.FreePDF.Gdihttps://www.nuget.org/packages/io7.FreePDF.Gdi/7.4.1io7.FreePDF.Layout.Gdihttps://www.nuget.org/packages/io7.FreePDF.Layout.Gdi/7.4.1io7.FreePDF.Wpfhttps://www.nuget.org/packages/io7.FreePDF.Wpf/7.4.1io7.FreePDF.Layout.Wpfhttps://www.nuget.org/packages/io7.FreePDF.Layout.Wpf/7.4.1
dotnet add package io7.FreePDF --version 7.4.1
dotnet add package io7.FreePDF.Layout --version 7.4.1
Fixed
- Signatures broken by inherited page values. Opening a document copies the
/Resources,/MediaBox,/CropBoxand/Rotatea page inherits from the
page tree onto the page. When anAppend-mode update wrote such a page, for
example to add a signature or a comment, it wrote those copies too. The page's
keys changed, and pyHanko judged the earlier signatures invalid. The update
now leaves out unchanged copies; values the application changes are still
written. Files from Ghostscript, xelatex and others put these values on the
page tree: 15 of 2,950 corpus files were affected. - Signed forms with combo boxes and list boxes. Selecting an option of a
combo box or a single-selection list box added the selected index (/I),
which ISO 32000-1 says should not be used for such fields. The field's keys
changed, and pyHanko judged a signature on the form invalid after the fill.
/Iis now written only for multiple selection, when options share an export
value, or when the field already has one. - Encrypted files with incremental updates. An encrypted PDF whose update
names the encryption dictionary again, as Acrobat and pyHanko write it (a
signed encrypted PDF, for example), could not be opened inImportor
Modifymode (InvalidOperationException). - Signature appearance not printed. A new signature field's widget had the
flags Print and Locked in/Ff(field flags) instead of/F(annotation
flags), so its appearance did not print. - Bookmarks with both
/Destand/A. Saving added a/Destto every
bookmark that leads to its page through a GoTo action, which ISO 32000-1
forbids: 948 bookmarks in 264 of 2,950 corpus files. A bookmark now keeps its
action while its destination is unchanged; a new or changed destination
replaces the action with a/Dest, and an action the application sets is kept. - Drawing on a page whose inherited
/Resourcesis a direct dictionary threw
NullReferenceExceptioninModifyandAppendmode.
Upgrading from 7.4.0
Update all FreePDF packages to 7.4.1 together and rebuild; the assembly version
is now 7.4.1.0. The public API is unchanged. Behaviour changes to check:
- Single-selection choice fields no longer get
/Iwhen an option is selected. - A bookmark whose destination you change, or that you give a new
DestinationPage, loses its action (/A) in favour of a/Dest; a bookmark
with an action you set yourself gets no/Dest.
Validation
All 7.4.0 release gates apply, plus:
- regression tests for each fix (bookmark actions, inherited page values in flat
and nested page trees, choice-field indices, signature widget flags, encrypted
files with updates using RC4-128, AES-128 and AES-256); 494 regression
tests in all; - pyHanko 0.29.1: a pyHanko-signed file whose page inherits its values,
countersigned by FreePDF, keeps both signatures VALID ("signing and form
filling"); filling a combo box and a list box in a form pyHanko certified is
"signing and form filling", VALID; a pyHanko-encrypted and signed form opens; - corpus of 2,950 files: no bookmark gets both entries and none leads to another
page; no updated page gains inherited keys (checked with pyHanko's revision
reader); the 13 encrypted files open as before; - an independent review of each fix, whose findings were fixed before release;
of the review's 77 encrypted samples, every one whose updates name the
encryption dictionary (pyHanko AES and RC4 with tables, streams and object
streams, up to three updates, and hand-made cases) opens with the right
content; deliberately damaged ones fail as in 7.4.0, and an update that leaves
/Encryptout of its trailer reads as unencrypted, as in mutool and poppler.
The attached packages are the verified CI artifacts from source revision 31254c1d9e32ec0d657d4ed729da1dad8a44daf9, and the same files that were
uploaded to NuGet.org. SHA256SUMS and validation.json record their hashes and package-install evidence.
NuGet.org adds its repository signature, so a package downloaded from NuGet.org has a different hash from the attached file.
CI: https://github.com/io7/FreePDF/actions/runs/41811189504 (core),
https://github.com/io7/FreePDF/actions/runs/41811189563 (packages/API/independent checks),
https://github.com/io7/FreePDF/actions/runs/41811189668 (comparisons),
https://github.com/io7/FreePDF/actions/runs/41812552650 (NuGet publication).