mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-10 18:20:31 -06:00
Every PSD/PSB open decoded the merged image unconditionally, but a normal layered Photoshop save carries a composite nobody reads: with layers present and nothing behind the colour channels, the decoded planes went straight to the drop. That composite is typically about half the file's bytes, and for ZIP-compressed files the parse-time validation had already inflated the same stream once - so layered ZIP opens paid the composite twice for nothing (P18: opening a 20 MP layered PSD measures 1753 ms p50 against a 1000 ms budget). The composite is now decoded only when a consumer exists: a flattened or multichannel file (the composite IS the image), or extra alpha/spot channels behind the colour ones. Layered files without extra channels skip the decode entirely; everything a layered import shows comes from the layer records either way. The parse-time ZIP validation stays: deferring it would break the corrupt-stream rejection the fuzz tests pin down, and with the decode skipped, layered ZIP opens now inflate the composite once (validation) instead of twice. Co-authored-by: Brandon Thomas <echelon@gmail.com>