mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-11-10 13:01:29 +00:00
Main (#5569) decodes every image through cos's ImageBudget, which counts the JBIG2 decoder's own work and the globals it reads, through main's own restore_shared_jbig2 and image::without_globals for the images that share a redacted image's /JBIG2Globals too. This branch replaces both with globals::unshare, so the merge keeps unshare and drops them. without_dictionary now decodes through ImageBudget::decode instead of Document::decoded_image_within, which main made private. That closes the gap the PR noted: the decoder's own work (up to hayro-jbig2's 2^30 steps an image) was charged one unit of the run budget. apply passes its run's allowance, what clearing left of it, as main's restore did. Past it apply is refused with ImagesPastAllowance, as main's restore was. remove_hidden gives unshare an allowance of its own (sanitize::unshare_unmarked), and past it is refused with SharedJbig2Budget: "redact fewer pages at a time" means nothing there, and Optimize's discard runs it too. SharedJbig2Budget's text now says finding and storing again. Tests: main's allowance test runs on unshare, with ImageBudget::with_work(0) refused as ImagesPastAllowance, through unshare_unmarked as SharedJbig2Budget, and u64::MAX storing one image. Test helpers decode through ImageBudget, since Document::decoded_image is no longer public. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AmsdeUCdTaD72jkDw2pJKY