The proptest panic sweep from issue #4 (75k+ cases, zero panics) is strong but not coverage-guided; a libFuzzer target explores byte patterns proptest's generators never produce, closing the last gap in the no-panic-from-file-contents guarantee for the wasm build where a panic is a DoS.
Instructions:
cargo fuzz init in crates/pksave with a target that runs from_bytes on arbitrary bytes, then walks every view/diagnostic like the existing sweep harness (reuse its accessor-walk function — extract it to a #[doc(hidden)] helper or a shared test-support module).
- Seed the corpus with the e2e fixtures and
new_empty() output; run locally ≥1 CPU-hour; commit the minimized corpus.
- Optional CI: a scheduled short run (
-max_total_time=300) — nightly-only since libFuzzer needs it; keep it off the PR path.
Alternatives considered
The existing proptest sweep already gates this class of bug and runs on stable in CI; this is defense-in-depth, priority low.
AFL++ works without nightly but integrates worse with cargo and CI.
The proptest panic sweep from issue #4 (75k+ cases, zero panics) is strong but not coverage-guided; a libFuzzer target explores byte patterns proptest's generators never produce, closing the last gap in the no-panic-from-file-contents guarantee for the wasm build where a panic is a DoS.
Instructions:
cargo fuzz initincrates/pksavewith a target that runsfrom_byteson arbitrary bytes, then walks every view/diagnostic like the existing sweep harness (reuse its accessor-walk function — extract it to a#[doc(hidden)]helper or a shared test-support module).new_empty()output; run locally ≥1 CPU-hour; commit the minimized corpus.-max_total_time=300) — nightly-only since libFuzzer needs it; keep it off the PR path.Alternatives considered
The existing proptest sweep already gates this class of bug and runs on stable in CI; this is defense-in-depth, priority low.
AFL++ works without nightly but integrates worse with cargo and CI.