Fix round, item 1. align != 2 * channels was u16 arithmetic: 32768 channels panicked a debug build and, with an alignment of 0, a release build accepted it; 32769 with 2 likewise. The check is now channels.checked_mul(2) == Some(align), as the spec and pack_verify.py read it. A block and a Y4M frame grow with the bytes read, never to a size the file declares, and the corpus check reads WAV data in bounded blocks: a 4 GiB data claim over 4 bytes allocates about 4 bytes. - Corpus: channels 32768 (alignment 0) and 32769 (alignment 2), and a 4 GiB data claim. - Release builds of wai-pack check overflow (profile.release), so CI's release tests catch this class. - tests/source_alloc.rs bounds what a reader allocates for such files. - source_diff.py (from the review's differential, seeded): Y4M and WAV mutations, every verdict of wai-pack source-verdict equal to pack_verify.py's; CI runs it against debug and release builds. Co-Authored-By: Claude Opus 5.5 <[email protected]>
48 B
48 B