feat(fuzz): use minset corpus culling#15368
Conversation
cc13c9f to
e9c4bb6
Compare
e9c4bb6 to
15a79ec
Compare
|
derek bench invariant |
|
cc @0xalpharush bench (invariant) event published. Results will be reported separately. View publisher run Config: subcommand: |
| let new_call_coverage = corpus_manager.merge_edge_coverage(&mut call_result); | ||
| let new_call_coverage = corpus_manager.merge_edge_coverage_with_edges_into( | ||
| &mut call_result, | ||
| &mut current_run.corpus_edges, |
There was a problem hiding this comment.
A call's coverage edges are added to current_run.corpus_edges before the pop decision, but (unlike cmp_seq) corpus_edges isn't trimmed when the call is popped (vm.assume discard / reverted-and-dropped calls).
So a popped call's edges end up on the surviving sequence's CorpusEntry and in top_rated, which can then favor a sequence that can't actually reproduce that edge.
I reproduced this with a coverage-guided invariant test (call hits a branch then vm.assume discards it; another call survives) — no pops → clean. It seems to self-heal on restart, so not a blocker, but should we trim corpus_edges on pop to keep minset accuracy correct during a live run?
mablr
left a comment
There was a problem hiding this comment.
Should be re-benchmarked (once infra is ready), and de-conflicted.
|
derek bench invariant timeout=300 |
|
cc @grandizzy bench (invariant) event published. Results will be reported separately. View publisher run Config: subcommand: |
|
derek bench invariant timeout=300 |
|
cc @grandizzy bench (invariant) event published. Results will be reported separately. View publisher run Config: subcommand: |
Summary
CachedDiskCorpusso evicted non-favored entries leave the hot in-memory corpus but remain available as cached/on-disk mutation donorsPrompted by: @0xalpharush
Tests
Note: cargo test -p forge config was also attempted, but that broad filter includes unrelated inline/live-log tests that failed locally due solc install snapshot output and a missing local RPC at 127.0.0.1:8545.