mirror of
https://github.com/storytold/craft-libs.git
synced 2026-10-31 07:39:23 +00:00
A no-plane PowerShot frame whose payload is shorter than plane + header ends inside the scan window with the record's real `ff d9 00` trailer, so rule (a) read the `ff d9` as a plane byte, reported 12 bits and then refused a valid file. Both discriminator signs now require a payload long enough to hold a plane, so a flat G1 frame decodes instead of being rejected. Also from the review: clamp samples to the declared depth so a damaged stream cannot put more than `bits` into a consumer's `1 << bits` LUT, report zero sensor dimensions as corrupt rather than as a limit, take a signed ImageInfo rotation modulo 360 (so -90 is 270), warn against pairing BlackLevel::values with Header::cfa by index, and pin actions/cache in the crate's workflow. Tests cover the trailer payload, end-of-block chain values, the clamp, zero dimensions, both white-balance slot layouts with every Canon setting, and each rotation spelling. The 11 CC0 samples still decode exact with CRAFT_CRW_REQUIRE_SAMPLES=1.