Commit Graph
5205 Commits
Author SHA1 Message Date
Grzegorz MartensandClaude Opus 5.5 4cc0abbe62 M8: a test that each form a kept Type 3 glyph draws is walked within an allowance of a page
The merge gave `prune_font_forms`' walk of each Form a kept glyph
draws the allowance of a page, which its call of `resource_ops` now
needs; no test pinned it. In
`the_form_a_kept_type3_glyph_draws_is_walked_within_the_allowance_of_a_page`
such a Form draws two forms without resources of their own, each past
half of the allowance, and the redaction is refused with the decoder's
limit; with two small ones it goes on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 13:03:50 +01:00
Grzegorz MartensandClaude Opus 5.5 718a725812 M8: the Type 3 cleanup reads forms, appearances and soft masks with /DecodeParms by reference
Three reads of the Type 3 cleanup came in from main in the merge, and
took `/DecodeParms` only when direct: the forms a surviving glyph draws
(`prune_font_forms`), a page's appearances without resources of their
own, and the soft mask groups without them (`add_soft_mask_ops`). Behind
a predictor whose parameters are an indirect object, each read the
predictor's tag bytes and row differences, which lex as operators that
use no resource, so nothing refused. The form's resources then lost the
image it draws, and the page lost the Type 3 font only the appearance
or the soft mask selects, with its glyphs. Each is now read with them
too, as this branch's other reads in the cleanup are; the appearances
still against the page's allowance.

Tests, each the by-reference form of one already on main:
- `an_image_a_type3_glyphs_form_with_parameters_by_reference_draws_is_kept`
- `a_type3_font_only_an_appearance_with_parameters_by_reference_selects_stays_on_the_page`
- `a_type3_font_only_a_soft_mask_with_parameters_by_reference_selects_stays_on_the_page`

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 12:26:27 +01:00
Grzegorz MartensandClaude Opus 5.5 e4d150a92a Merge main into fix/redact-prune-through-forms
Main reworked the redaction cleanups this branch changes: #5969 reads
each inherited form once for all names (`names_content_draws`), #5924
prunes the forms a surviving Type 3 glyph draws and passes the page to
`prune_type3_from_resources`, and #6474 reads a page's annotation
appearances toward one operator total and one byte allowance.

- `interp/prune.rs`: `names_content_draws` keeps main's one read per
  form and takes this branch's three changes to `content_draws`: it
  reads operators one at a time, holding no stream's whole and decoding
  each form only in its turn; it reads forms with `/DecodeParms` given
  by reference; and a `/Resources` that isn't a dictionary is none of
  the form's own. It charges no allowance, as `content_draws` didn't:
  it runs after the pages' walks, over every holder, where no page's
  allowance is left to spend.
- `type3.rs`: `prune_type3_from_resources` takes both the page's
  allowance and main's `page`. The appearances main reads are charged
  to that allowance, which the content and its forms spend too, in
  place of a fresh one of their own, so one page has one allowance.
  Main's `record_used` serves this branch's one-operator-at-a-time read
  of glyph programs, and `scan_stream_object`, which took over
  `scan_xobject`'s read, reads with `/DecodeParms` by reference.
  `prune_font_forms` gives each form's walk the allowance of a page, as
  `prune_retired_properties` does for each content.
- `interp.rs`, `lib.rs`, `sanitize.rs`: both arguments at each call.
- `edit/src/rules.rs`: the refusal of incomplete content stays, with
  main's `text::joined`.
- Tests: both sides' kept, in `edit/src/tests.rs` and
  `redact/src/tests/surviving_references.rs`. A new one,
  `a_page_s_appearances_spend_what_its_content_left_of_the_allowance`,
  pins the shared allowance: 1 MiB of content and an appearance within
  half a MiB of the allowance are refused together, though the
  appearance alone fits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 11:42:10 +01:00
Dylan M. Taylor 25025fa271 Merge pull request #6674 from dotCooCoo/chore/craft-update-1b34eba41
Updates: take craft-update from craft-libs main at 1b34eba41
2026-11-08 23:30:05 -05:00
Dylan M. Taylor fac631cd02 Updates: handle RestartToUpdate response 2026-11-08 23:00:08 -05:00
BFlat ca9e3c2c33 Merge pull request #6666 from storytold/merge/redact-forms-misc
Land redaction, organize, forms, annotation, text, measure, XFA, XFDF and edit fixes (#6458, #6459, #6460, #6463, #6474, #5969, #5761, #5852, #6231, #6366, #6504, #6570, #6610, #6597, #6620, #6650)
2026-11-09 11:50:22 +08:00
dotCooCoo 7d4d851343 Updates: take craft-update from craft-libs main at 1b34eba41 2026-11-08 19:47:24 -08:00
bflatastic 6b6531ff03 Merge remote-tracking branch 'origin/main' into tmpup
# Conflicts:
#	crates/engine/src/tests.rs
2026-11-09 10:31:59 +07:00
BFlat 5dbd0076ad Merge pull request #6662 from storytold/merge/preflight-pdfa-checks
Land PDF/A verify and convert checks (#6232, #6254, #6172, #6202, #6203, #6206, #6207, #6214, #6215, #6219)
2026-11-09 11:31:32 +08:00
bflatastic 6bfc0af05d Merge remote-tracking branch 'origin/main' into tmpup 2026-11-09 10:12:20 +07:00
bflatastic 75a370c202 Merge remote-tracking branch 'origin/main' into tmpup 2026-11-09 10:12:17 +07:00
BFlat d8c2b9ffe8 Revert "fix(ui): show creation and modification dates in Document Properties (#5534) (#5536)" (#6671) 2026-11-09 11:09:22 +08:00
bflatastic 02fbca9fd3 Name a kid from its /Parent as written, and draw a referenced CMYK entry as the reference gives it 2026-11-09 09:59:06 +07:00
bflatastic 08c0a59212 Merge main into merge/redact-forms-misc
# Conflicts:
#	ROADMAP.md
#	crates/render/src/text/tests.rs
2026-11-09 09:56:59 +07:00
bflatastic 4e86cd337d Give the preflight test fixtures a PDF/A-2 file header
The header check reports a file without the binary comment, and Save as PDF/A then makes the next save a full one. The known-answer documents and the generation-repair file predate it: the minimal document got a 6.1.2 issue, and an undamaged file needed a full save for its header instead of being saved incrementally. They now start with the comment, as the crate's unit test documents do.
2026-11-09 09:56:47 +07:00
bflatastic 8ed1e1e155 Merge origin/main into merge/preflight-pdfa-checks 2026-11-09 09:55:52 +07:00
BFlat cde331fb7e Merge pull request #6663 from storytold/merge/render-interpret-patches
Land render and font patches (#6292, #6287, #6314, #6353, #6359, #6368, #6409, #6491, #6545, #6516, #6521, #6528, #6533, #6529, #6542, #6543, #6569, #6572)
2026-11-09 10:54:50 +08:00
BFlat 83b8d4dc2f Skip the Bates ACL test where the deny entry doesn't bind (#6670) 2026-11-09 10:52:41 +08:00
mmmaarian03-crypto 28093ed4cf UI: a panic in a frame no longer closes the app and its tabs (#3914) (#4201) 2026-11-09 10:14:43 +08:00
mmmaarian03-crypto fdfdf6ed9f Attachments: a saved attachment keeps the PDF's Mark-of-the-Web on Windows (#3990) (#4091) 2026-11-09 10:14:27 +08:00
Ozt-y 9792328d67 fix(edit): preserve annotation optional-content membership in marked content (#3213) (#3275) 2026-11-09 10:14:10 +08:00
Luigi Pinna 8c7ea6377e test(content): the #2456 tests use a filtered inline image (#2483) 2026-11-09 10:13:54 +08:00
mtlcl410 b8c8616d05 M14: the Windows installer lets the user choose the install folder (#1139) (#2480) 2026-11-09 10:13:38 +08:00
MarekSpodBiedry 4b52448635 Use PingFang from the reserved font directory on macOS 26 (#1716) (#1893) 2026-11-09 10:13:15 +08:00
MarekSpodBiedry 344ba9f8d7 Refuse a legacy encryption key length above 128 bits instead of panicking (#1769) (#1882) 2026-11-09 10:13:00 +08:00
MarekSpodBiedry 53ea320171 Check the remembered path of a pathless doc_save against the root (#1791) (#1879) 2026-11-09 10:12:45 +08:00
MarekSpodBiedry 448a7cab67 Publish action wizard outputs without replacing existing files (#1805) (#1874) 2026-11-09 10:12:29 +08:00
NetterSilver ea292f6be1 Edit background, watermark and header colours as sRGB (#5218) 2026-11-09 10:12:13 +08:00
NetterSilver b0482759e4 Roll human_size over to MB when KB rounds to 1024.0 (#5186) 2026-11-09 10:11:57 +08:00
mmmaarian03-crypto 06911895c6 Dialogs: a dialog no longer keeps a taller one's height (#5118) (#5139) 2026-11-09 10:11:41 +08:00
Unhumanje ab7af72347 fix(forms): name tree nodes sharing one long /Kids array no longer exhaust memory (#5121) 2026-11-09 10:11:18 +08:00
mtlcl410 1ec71c1bf0 M12: an XFA caption beside its field wraps in its reserve (XFA 3.3 p. 645) (#5109) 2026-11-09 10:11:02 +08:00
jonathanwxh-cell 9011276f2f fix(optimize): size objects in compressed object streams by their compressed share (#4951) 2026-11-09 10:10:25 +08:00
NetterSilver 51655eab0c Reject '+' sign in print page ranges (#4931) 2026-11-09 10:10:10 +08:00
NetterSilver ebcc564f1e Keep the outline intact when move_bookmark gets an invalid target (#4901) 2026-11-09 10:09:46 +08:00
midasmatterhorn 98b4761934 edit: a variation selector after existing text draws the base glyph instead of failing the edit (#4899) 2026-11-09 10:09:30 +08:00
jonathanwxh-cell 5e671ec301 fix(render): treat combined fill-and-stroke operators as a knockout group (#3229) (#4788) 2026-11-09 10:09:06 +08:00
Atalantis 138acb38b1 macOS: declare the UI languages so the open and save panels are translated (#4785) 2026-11-09 10:08:50 +08:00
NetterSilver 6e2729ae21 Reject signs in XMP numeric character references (#4755) 2026-11-09 10:08:34 +08:00
Guillem Hermida 6de0ed119c tests: the Search panel snapshot searches again once both pages are read (#5560) 2026-11-09 10:07:27 +08:00
Nate Glasby b02765b6a1 fix(ui): show creation and modification dates in Document Properties (#5534) (#5536) 2026-11-09 10:06:03 +08:00
jayzed80 7e90730fae fix(compare): visual compare no longer overflows on declared sizes its buffers cannot hold (#5458) 2026-11-09 10:05:48 +08:00
bflatastic 0a4d50a904 Merge origin/merge/render-interpret-patches 2026-11-09 09:05:40 +07:00
jayzed80 9c9b65437f fix(optimize): downsampling never enlarges; a huge target_ppi aborted on a 20 TB allocation (#5425) 2026-11-09 10:05:33 +08:00
Ethunxxx d67b82c591 M4: bookmarks run their actions as links do (organize.bookmark-actions) (#5410) 2026-11-09 10:05:18 +08:00
bflatastic b21ee3a710 Decode a soft mask that isn't averaged down within its image's decode
Patch 82 sent every soft mask through the decoded-image cache, so a mask that patch 91 keeps failed inside its image's entry got a second entry and counted as another decode. Only a mask averaged down needs an entry of its own; any other decodes as it did before patch 82.
2026-11-09 09:05:11 +07:00
jonathanwxh-cell a22bede984 fix(forms): resolve field and widget references in ResetForm and Hide actions (#5364) 2026-11-09 10:05:03 +08:00
Livio Oswald fb9b8bded7 M3: text_find can stop at its limit without reading on to the end (#5328) (#5335) 2026-11-09 10:04:48 +08:00
jonathanwxh-cell cf07ece17d fix(organize): remove uninherited crop boxes and guard disjoint or overflowing boxes (#5282) 2026-11-09 10:04:32 +08:00
mmmaarian03-crypto 4fa26f4a24 Reload: a file changed under an open dialog waits for it to close (#3917) (#5278) 2026-11-09 10:04:17 +08:00