open-standards/wai/pack-conformance/stills/data-split.png
Transaction Science 7598dde8bc wai-pack: one PNG reader's rules in both verifiers, with a corpus of stills
§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]>
2026-10-08 15:42:44 -04:00

127 B
5x3px