format-probes: two adjacent start codes no longer panic the AVS3 probe #586

Merged
dcharlot merged 1 commit from wai/avs3-probe-panic into main 2026-11-02 20:12:45 -05:00
Owner

A payload with a start code prefix directly after another (00 00 01 00 00 01) made the AVS3 unit split slice backwards and panic. A hostile payload could stop anything that probed it, and wai.video.avs3 and wai.audio.avs3 both go through that split.

The fix: that unit is now the empty one format-probes §8.2 reads, and the payload is refused because its first unit isn't a sequence header.

How it was found: by wai identify, still in progress, which runs every probe on whatever file it is given. Its test file happened to hold the pattern.

So that it stays found: a new test gives every probe 30,000 payloads of hostile bytes built from what their framing is made of, and another holds adjacent start codes to a refusal for AVS3 video and audio, H.265, H.266 and LCEVC. No other probe panicked. Both tests failed before the fix. format_probe_verify.py still passes.

🤖 Generated with Claude Code

A payload with a start code prefix directly after another (`00 00 01 00 00 01`) made the AVS3 unit split slice backwards and panic. A hostile payload could stop anything that probed it, and `wai.video.avs3` and `wai.audio.avs3` both go through that split. **The fix:** that unit is now the empty one format-probes §8.2 reads, and the payload is refused because its first unit isn't a sequence header. **How it was found:** by `wai identify`, still in progress, which runs every probe on whatever file it is given. Its test file happened to hold the pattern. **So that it stays found:** a new test gives every probe 30,000 payloads of hostile bytes built from what their framing is made of, and another holds adjacent start codes to a refusal for AVS3 video and audio, H.265, H.266 and LCEVC. No other probe panicked. Both tests failed before the fix. `format_probe_verify.py` still passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
format-probes: two adjacent start codes no longer panic the AVS3 probe
All checks were successful
WAI energy receipts / energy receipts · macos (pull_request) Successful in 8m28s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 58s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 4m4s
wai-pack / wai-pack · macos (pull_request) Successful in 4m45s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 6m1s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 14m12s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 5m27s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 12m41s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m31s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m51s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 18m20s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 9m59s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 16m29s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 11m1s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 16m39s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m53s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 21s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 22m17s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m11s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 27s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 47s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m19s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 13m56s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m50s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m17s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 35s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m32s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m41s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m39s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h8m43s
a924cdc8fd
A payload with a start code prefix directly after another (00 00 01 00 00 01)
made the unit split slice backwards and panic, so a hostile payload could stop
whatever probed it. It is now the empty unit §8.2 reads, and the payload is
refused as the first unit not being a sequence header.

The other probes do not have this shape, and a new test now holds that of all of
them: 30,000 payloads of hostile bytes, built from what their framing is made of.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!586
No description provided.