§5.7 says a still is any PNG of 8-bit RGB without interlace, and the two readers disagreed on what that admits. Rust refused a suggested palette, which an RGB picture may carry; Python accepted an interlace, bytes after IEND and a short row. Both now read by PNG's chunk rules: IHDR first; an optional PLTE before the image data; consecutive IDATs; ancillary chunks read past; unknown critical chunks refused; IEND last and empty; a whole zlib stream with a window of at most 32 KiB, its Adler-32 checked and nothing after it; exact rows. Rust now inflates with miniz_oxide's core decompressor, so it sees how much input the stream used. It refuses bytes after the stream, which it used to read past whenever their last four bytes were the checksum. It also refuses the window PNG forbids, which a non-wrapping buffer would otherwise let through. pack-conformance/stills/ holds the files both readers give one verdict on. wai-pack's conformance check and pack_verify.py check each file against its verdict and, when it is read, the SHA-256 of its samples. Co-Authored-By: Claude Opus 5.5 <[email protected]>
127 B
5x3px
127 B
5x3px