Commit Graph
4559 Commits
Author SHA1 Message Date
Grzegorz MartensandClaude Opus 5.5 0a00862e91 redact: the shared-JBIG2 walk names by object number, and reads what it stores by number and generation
Main's #1143 (863af864a), merged in 77b9cfa31, makes cos read a reference whose generation isn't
its object's as null. The walk that finds what shares a /JBIG2Globals dictionary with what left
fetched through `Document::get`, but remembered what it read by object number alone, so a
reference of another generation and the object's own one shared what the first of them read:

- What a parameters value names (`Run::names_in`): `/DecodeParms [10 1 R 10 0 R]` on an image
  that left, object 10 naming dictionary 9, read 10 1 R as null, named nothing, and remembered
  that for object 10. The 10 0 R after it found it, so nothing named 9, and the dictionary
  stayed in the file with the image another page kept.
- A size, filters or parameters an image is stored again with (`Run::follow`): an image whose
  `/Width 11 1 R` reads as null can't be stored again, and refused the run alone. Once another
  image had read 11 0 R, it took that width and was stored with it.

What an image names is now read by object number, whatever generation the reference gives
(`Run::fetch_numbered`), in `names_in` and in the `/JBIG2Globals` chain alike: a reader that
doesn't compare generations draws with that object, so what an image that left names this way
may hold its shapes. That is how the chain already named `9 1 R` (the "another generation" way
out), and how both read before #1143. What is read by number is remembered by number. The
values an image is stored again with are read as cos reads them, and remembered by number and
generation, so a reference of another generation reads its own way.

`kept`'s comment said a reference reads the object of its number whatever its generation, which
is no longer so for a full save. It says how `reachable_objects` reads one now. The README and
`Run`'s comments say which reads take the number and which the generation too.

Tests:
- `a_redacted_scans_shared_jbig2_dictionary_leaves_the_file` gains three ways out:
  - parameters through another generation, then their own;
  - parameters through another generation alone;
  - a `/JBIG2Globals` reference to a reference of another generation.
- `a_size_through_another_generation_isnt_the_one_its_own_reference_reads` stores no image
  with the width another reference read. It refuses instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 12:38:38 +01:00
Grzegorz MartensandClaude Opus 5.5 77b9cfa310 Merge main into fix/jbig2-dictionary-any-route
Conflicts, and how they were resolved:

- cos writer.rs and lib.rs: main now numbers a full save in `full_save_order` and exports
  `reachable_objects`, the object numbers a full save writes, for the pattern guard. This
  branch had added the same walk as `walk` and `reachable`. Main's is kept, with its alias
  handling, and this branch's is dropped: `globals::kept` is now `reachable_objects`, so the
  JBIG2 cleanup and the pattern guard read one walk. `kept` returns the walk's error (a save
  that can't number its objects), which redaction and Remove Hidden Information pass on. The
  cos test of what is reachable, and two redaction tests, read `reachable_objects` instead.
  The exports keep this branch's `DECODE_PARMS_KEYS` and main's `TextChars`,
  `civil_from_days` and `new_file_id`.
- redact lib.rs: main unlinks pruned patterns from `/Pages` nodes after `unlink_doomed`; this
  branch replaced `restore_shared_jbig2` with `globals::unshare`. Both stay, the unlink first:
  an image a pruned pattern's cell drew leaves the file with it, and is a user of a dictionary
  that left too.
- redact sanitize.rs: main's `strip_outline_actions` and this branch's `unshare_unmarked` both
  stay. At the end of `remove_hidden`, `unshare_unmarked` runs after main's `unlink_undrawn`,
  so an image unlinked for being drawn nowhere takes a shared dictionary with it, and is
  followed by main's `require_full_save_with_new_id`.
- redact image.rs: `MAX_PIXELS` is `pub(crate)` on both sides; the comment names
  `globals::without_dictionary`, where this branch moved `without_globals`.

Tests: `an_undrawn_image_unlinked_takes_a_shared_jbig2_dictionary_too` (Remove Hidden
Information, through `unlink_undrawn`) and
`an_image_a_pruned_patterns_cell_drew_takes_a_shared_jbig2_dictionary_too` (a redaction,
through `unlink_pruned_patterns`) pin the order of the two new routes before `unshare`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY
2026-11-09 11:59:18 +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
bflatastic 6b6531ff03 Merge remote-tracking branch 'origin/main' into tmpup
# Conflicts:
#	crates/engine/src/tests.rs
2026-11-09 10:31:59 +07: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
MarekSpodBiedry 4b52448635 Use PingFang from the reserved font directory on macOS 26 (#1716) (#1893) 2026-11-09 10:13:15 +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
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
Ethunxxx fdffff7b85 M7: links that go to a page open at a chosen zoom (edit.action-goto) (#5277) 2026-11-09 10:04:00 +08:00
bflatastic 9e6854869b Merge origin/main into merge/render-interpret-patches
# Conflicts:
#	crates/render/src/raster/tests.rs
#	crates/render/src/text/tests.rs
#	parity/acrobat-features.toml
#	vendor/README.md
2026-11-09 09:03:56 +07:00
bflatastic 12dfc73cfd Format the renamed helper's call 2026-11-09 09:03:50 +07:00
Max Mittelstädt 475ba82fea Track XMP attribute quotes only inside tags (#5271) 2026-11-09 10:03:44 +08:00
Ethunxxx 4ca5fccf9e M4: Initial View magnification offers 25% and 100% (#5254) (#5265) 2026-11-09 10:03:30 +08:00
bflatastic fbff06bd83 Merge main into merge/redact-forms-misc
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/render/src/inspect/tests.rs
#	crates/render/src/text/tests.rs
2026-11-09 09:03:20 +07:00
austin62jake 2d3e3a653f docs: a portable copy keeps its single-instance socket in %LOCALAPPDATA% (#5260) 2026-11-09 10:03:15 +08:00