LEARNING.md indexes ten concept-to-file pointers (the spec floor was five) — the newtype pattern, exhaustive enum match, sans-IO, trait extension seams, thiserror + hot-path match-and-continue, Arc<Mutex> vs Arc<RwLock>, DashMap, str0m's single-mutation invariant, graceful shutdown, include_str!. fuzz/README.md pre-paves the layout (no hostile-bytes surface in slice 1; harnesses land at step 5 per the out-of-scope table). README's new dev-loop section documents the libopus FFI prerequisite and the manual e2e steps.
22 lines
1.2 KiB
Markdown
22 lines
1.2 KiB
Markdown
# fuzz/ — cargo-fuzz harness directory (placeholder)
|
|
|
|
**Status:** placeholder. Not yet a cargo-fuzz project — just the directory.
|
|
Fuzz harnesses land at spearhead step 5 (PSTN trunk) alongside the
|
|
SIP/SDP/RTP wire parsers (PORT_PLAN §10 mandates continuous fuzzing of
|
|
every wire parser). Slice 1 has no hostile-bytes surface (the browser is
|
|
trusted), so no harnesses here yet — the `fuzz/` dir pre-paves the
|
|
layout. Populating this directory with a real `cargo-fuzz` project
|
|
(`fuzz/Cargo.toml` + `fuzz/fuzz_targets/*.rs`) happens at step 5.
|
|
|
|
If you're at step 5, replace this README with that structure:
|
|
- `fuzz/Cargo.toml` — cargo-fuzz manifest.
|
|
- `fuzz/fuzz_targets/sip_parser.rs` — fuzz the SIP parser.
|
|
- `fuzz/fuzz_targets/sdp_parser.rs` — fuzz the SDP parser.
|
|
- `fuzz/fuzz_targets/rtp_packet.rs` — fuzz the RTP packet parser.
|
|
- CI job running a short fuzz burst on each PR (the cargo-fuzz integration
|
|
lands in `.github/workflows/` at that point).
|
|
|
|
The hot-path "drop + observe, don't crash" policy (spec §3.8) is what the
|
|
future harnesses assert against: throw arbitrary bytes at the parser,
|
|
assert it returns an error or drops silently — never panics.
|