Commit Graph
4062 Commits
Author SHA1 Message Date
Dylan M. Taylor 269495cd38 security(heif): budget every reconstruction before it runs
The primary item and the selected thumbnail are scanned before Context::grid rebuilds their descriptors, every tile reference is counted (repeats included) before the size check dedupes them, and the Exif and XMP items are scanned before they are read.
2026-10-25 15:45:31 -04:00
Dylan M. Taylor d8ceb3a6af security/meta,merge,raw,tiff,denoise: bound memory sized by attacker-shaped inputs
XMP flattening, sparse-focus EXIF decode (plus the maker-note and TIFF value
budgets), lossy-DNG chunk staging, panorama stitch frames, the reference ONNX
executor's tensors and the denoise product reader all now reject or cap what a
malformed file can make them allocate: each result is checked before the
memory behind it is reserved, every regression carrying a test that fails
without its bound.
2026-10-25 15:42:19 -04:00
Dylan M. Taylor d00df6319c security/raw: bound hostile-memory paths in raw decoders
Sparse walkers, truncated MEF/lossy-JPEG strips, embedded JPEG sizes, the
CR3 preview marker walk, OpcodeList3 full-image passes and caller-supplied
Deflate tile edges each let a small file or one bad argument multiply
allocations or CPU work thousands of times. Each path now is bounded,
every fix with a regression test that failed (or blew up) before it, plus
a tiff::image single_chunk helper so preview extraction never builds a
descriptor vector for a hostile multi-strip layout.
2026-10-25 15:42:19 -04:00
Dylan M. Taylor 178eef790b heif: bound iloc item-extent visits before reconstructing in probe 2026-10-25 15:42:00 -04:00
Dylan M. Taylor b88f72b9df sec: bound heic-rs 0.1.4 work around hostile HEIF containers
heic-rs has no aggregate work budget in container parsing: ipma
association entries rescan earlier item ids after each other and an
iloc construction-method-2 extent rebuilds its source item afresh. Cap
the ipma/iloc boxes before heic-rs reads them, and stop probe paying
for a reconstruction heft beyond the file's own size. decode: refuse
files carrying more than 12 container transforms (each would re-copy
the full picture; CodeRabbit row #44), check a grid's payload canvas
against the pixel limit before allocating for it (#48), and to_rgb16
refuses an oversized w*h*ch rather than asking for a multi-gigabyte
buffer.
2026-10-25 15:42:00 -04:00
Dylan M. Taylor 015ca9eeba fix(updates): localize the update status messages and format the sources 2026-10-25 15:34:06 -04:00
Dylan M. Taylor ee48785090 fix(updates): address review feedback
Wake the UI when a manual check is queued from a menu callback; the update prompt owns the keyboard while it is open (LightCraft); Download opens through the desktop URL hook (FilmCraft); the Help menu dispatches through menus::invoke (FigCraft); print jobs and comment drafts hold an install back (WordCraft); Check for Updates is a registered command (GridCraft); an install holds back while documents are unsaved.
2026-10-25 15:17:03 -04:00
Dylan M. Taylor 2d3c7275b2 fix(updates): drop the manual window's custom id; pin craft-update to craft-libs main (db19c37) 2026-10-25 15:07:57 -04:00
Dylan M. Taylor 8e5a6fc2e7 refactor(updates): hold the install back while documents are unsaved 2026-10-25 14:53:33 -04:00
Dylan M. Taylor 2b9317519c feat: startup update prompt modal and direct self-updating
The update flow (check at start or on request, the startup prompt, the self-update worker) is craft-update's Updater; the app only supplies the suite, its close path and its status window. The check at start is opt-in for the desktop app, and the Windows update helper runs before argument parsing.

Ref: storytold/craft-libs#319
2026-10-25 14:22:14 -04:00
Dylan M. Taylor 1a3d9aff1e Merge pull request #2913 from storytold/codex/egui-037-lightcraft-20261023
Migrate LightCraft to egui 0.37 with current main preserved
2026-10-25 14:10:49 -04:00
aiongg 672baaea46 Merge lightcraft#2913 (egui 0.37) into docking-adoption; craft-ui and craft-docpath at craft-libs main a091680 2026-10-25 17:36:59 +00:00
aiongg c01d4c7074 Merge lightcraft#2913 (egui 0.37) into title-bar-movable; craft-window at craft-libs main a091680 2026-10-25 17:19:47 +00:00
aiongg df05e59474 Docking: the Info fields test window is tall enough for the place fields in the dock column 2026-10-25 17:08:39 +00:00
aiongg d4cfd2e6d5 LR-BEHAV-TITLEBAR: the checklist row follows craft-window's title_bar 2026-10-25 17:07:16 +00:00
aiongg 649e84b0ed Top bar: repin craft-window to craft-libs main 5bbe9f6 2026-10-25 16:25:27 +00:00
aiongg 1291d391d9 Docking: repin craft-ui and craft-docpath to craft-libs main 5bbe9f6 2026-10-25 16:25:25 +00:00
aiongg f52df54f13 Merge upstream main into title-bar-movable 2026-10-25 16:24:58 +00:00
aiongg fd26427cab Merge upstream main into docking-adoption 2026-10-25 16:24:58 +00:00
aiongg 901a115bf7 Top bar: repin craft-window to craft-libs main ea4c823 2026-10-25 13:53:10 +00:00
Brandon ThomasandClaude Opus 5.5 03c88c166c Release 0.14.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.14.0
2026-10-25 09:26:32 -04:00
skylar taylor-barrick 3401286b5c egui037: preserve modal focus and first-pass text selection 2026-10-25 14:15:30 +01:00
aiongg 19ab821477 Top bar: repin craft-window to craft-libs 4093ea4; the title bar is announced from empty_area's response 2026-10-25 12:41:42 +00:00
aiongg 577b6cfced Top bar: the title-bar drag uses craft-window's title_bar, and a panel over the bar keeps the window still on macOS 2026-10-25 12:35:44 +00:00
aiongg 4bc5d2b587 Docking: the web app resets a saved split-frame layout once too 2026-10-25 12:17:42 +00:00
aiongg b477efd3da Docking: repin craft-ui and craft-docpath to craft-libs b6d35e2 2026-10-25 12:17:31 +00:00
aiongg 8ae15d4f5e Docking: side panels in dock columns; saved split-frame layouts reset once 2026-10-25 12:17:28 +00:00
skylar taylor-barrick c627ce7210 egui-037: preserve modal input ownership and packaged font notices 2026-10-25 13:14:34 +01:00
skylartaylor e7144adc1f M0.37: reconcile current LightCraft main and qualify the migration 2026-10-25 07:47:22 +01:00
aiongg 4e6c210a5f Docking: repin craft-ui and craft-docpath to craft-libs 4dc543c 2026-10-25 05:57:50 +00:00
aiongg 7291abdc14 Merge upstream main into docking-adoption 2026-10-25 05:55:03 +00:00
aiongg 31ec62cd03 Info panel Target Photo edits, Add Keywords cursor request and Fixed keys follow-ups (#2889)
* LR-PREF-SHORTCUTS: the shortcuts panel's Fixed keys ignore keys saved for unknown commands

* KEYC-METADATA: an Add Keywords request the Keywords panel can't take in time expires

* LR-META-INFO: Target Photo saves an Info edit to the photo it shows
2026-10-25 00:58:10 -04:00
aiongg 5e548627df Merge pull request #2876 from aiongg/dotcoocoo-batch
Integration batch: 10 community PRs (slideshow, print templates, View Options, Info panel, keyword and metadata keys)
2026-10-25 00:13:38 -04:00
aiongg e8588b925b Docking: repin craft-ui and craft-docpath to craft-libs 8a503cf 2026-10-25 03:59:13 +00:00
aiongg c3feda15c0 LR-META-INFO: the Info panel shows Selected Photos by default; gaps.md lists its change notes once 2026-10-25 03:36:14 +00:00
aiongg e339afc263 Merge PR #2810: LR-META-INFO: the Info panel can show metadata for the selected photos 2026-10-25 02:25:16 +00:00
aiongg 6e5e958639 Merge PR #2792: LRC-DEV-VIEWOPTIONS: View Options can turn off the loupe's "Rendering…" message 2026-10-25 02:24:50 +00:00
aiongg 17a3b80702 Merge PR #2790: LRC-DEV-VIEWOPTIONS: the info overlay can show briefly when the photo changes 2026-10-25 02:24:29 +00:00
aiongg 77196373a9 Merge PR #2870: KEYC-METADATA: Cmd+K / Ctrl+K puts the cursor in the Add keyword box 2026-10-25 02:24:29 +00:00
aiongg 122859d269 Merge PR #2846: KEYC-METADATA: Alt+0 / Alt+Shift+0 go to the next / previous keyword set 2026-10-25 02:24:03 +00:00
aiongg 387ad02b79 Merge PR #2832: LR-PREF-SHORTCUTS: a declared shortcut yields to a key the saved keymap gives another command 2026-10-25 02:23:22 +00:00
aiongg eb9ef0a40e Merge PR #2824: KEYC-METADATA: Cmd+Alt+Shift+C / V copy and paste metadata 2026-10-25 02:23:21 +00:00
aiongg 5c46163e66 Merge PR #2778: LRC-PRINT-TEMPLATES: print templates export to a file and import from one 2026-10-25 02:23:20 +00:00
aiongg f923967c63 Merge PR #2786: LRC-SS-PLAYBACK: a manual slideshow waits for the arrow keys 2026-10-25 02:23:20 +00:00
aiongg 75d8e06850 Merge PR #2816: Tests: the launch-list read-only test compares a held lock file without reading it (Windows) 2026-10-25 02:23:19 +00:00
skylartaylor c057ccc23f Migrate LightCraft to egui 0.37 and reconcile dependency and font locks
Preserve current main, adapt frame/input and IME handling, and keep library
check results stable across layout passes. Include the matching Nix font lock
and reviewed attribution changes.
2026-10-25 02:54:42 +01:00
aiongg 8e16c05cbb Docking: a panel whose saved place is gone opens beside the photo on its side
When a hidden panel's anchor is neither shown nor hidden, craft-ui falls
back to the given anchor's tabs. The photo view is that anchor and takes no
tabs, so the panel opens beside it on its default side instead of at the
right edge. Test: Library anchored on an absent Presets opens to the left
of the photo.
2026-10-25 00:34:42 +00:00
dotCooCoo beb42abb25 KEYC-METADATA: Cmd+K / Ctrl+K puts the cursor in the Add keyword box
Lightroom Classic's keyboard shortcut page lists Command+K (Ctrl+K on
Windows) for Add keywords. LightCraft had no key for it.

Add Keywords (panel.addKeywords, Cmd+K) shows the Keywords panel,
opens its Keywording section when it is folded shut, and puts the
cursor in the Add keyword box, so the next keywords typed go to the
selected photos. Pressed again, it leaves the panel open. With no photo
selected the panel shows its note, and selecting photos later does not
move the cursor into the box.

The command label has a row in every catalog. The KEYC-METADATA row,
docs/ui-parity.md and docs/library-shortcuts.md list the key. The
KEYC-METADATA row also lists the existing Alt+1 to Alt+9 keyword set
keys in place of "no keyword sets".
2026-10-24 16:48:57 -07:00
aiongg 02aa1e0f59 Docs: only the five split zones of ui.dock move have PascalCase names 2026-10-24 23:41:54 +00:00
aiongg 1e4cc14dfb Docking: group and window menu labels go through tr() in sentence case 2026-10-24 23:41:54 +00:00