int_payload::declared_cost refused a keyframe-1 WIV1 whose keyframe does not give the clip's h × w as geometry_mismatch, but the decode compared the size only after decoding the keyframe, so the same bytes could be refused there for the keyframe's stream (stream_noncanonical) instead. The decode now plans the keyframe and compares its size with h × w before it decodes a symbol of it, as declared_cost does; integer-payloads §7 lists the check at step 4. The Rust verifier (wai_int_payload_vectors verify) also requires declared_cost to refuse each decode-layer fixture with the decode's code, unless that code comes from a stream or a network run. Fixtures: wiv1_geometry_flip_* (seven), wiv1_geometry with one byte of its keyframe's last stream words changed, each geometry_mismatch, regenerated through the generator; the Python verifier checks that they parse. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.1 KiB
2.1 KiB