Documentation
¶
Overview ¶
Package fuzzjudge decides, from the progress lines the Go fuzzer prints, whether a fuzz run stalled. `go test -fuzz` ends with PASS after a time limit whether or not anything ran in the last minutes, so scripts/fuzz.sh passes the log through cmd/fuzzjudge.
What it can see is the whole run's rate, not one input or one worker. It fails a run in which
- no execution happened for StallGap anywhere in the run, including at the end of the log; or
- the rate in the second half of the run (the median of the stretches that had executions) fell below MinRatio of the rate in the first half (after its first tenth, which is warm-up): a collapse to under a third.
It does not fail the pauses the fuzzer makes itself (12 to 18 seconds with no execution, seen in real runs), nor a stall of 30 seconds or less at the end, nor a rate that varies by a factor of two. A stall of one input in one of several workers leaves most of the rate, so it is the watchdog in scripts/fuzz/fuzz_test.go that stops an input that takes ten seconds, while it runs.
Index ¶
Constants ¶
const ( // StallGap is the time without an execution that is a stall. The fuzzer pauses // by itself for 12 to 18 seconds (seen in real runs), so it is more than that. StallGap = 30 * time.Second // MinRatio is the least rate of the second half of a run, as a part of the rate // of its first half. The rate of a real run varies by a factor of two from one // half to the other (the fuzzer pauses to minimise an input that found new // coverage), so only a collapse is a stall. MinRatio = 0.3 )
Variables ¶
This section is empty.