(fuzzer: &mut Fuzzer, stats: &mut monitor::LocalStats)
| 974 | |
| 975 | impl<S: StageData> FuzzerStage for S { |
| 976 | fn run(fuzzer: &mut Fuzzer, stats: &mut monitor::LocalStats) -> anyhow::Result<StageExit> { |
| 977 | let mut stage_data = match Self::start(fuzzer) { |
| 978 | Ok(data) => data, |
| 979 | Err(err) => match err { |
| 980 | StageExit::Unknown(err) => return Err(err), |
| 981 | exit => return Ok(exit), |
| 982 | }, |
| 983 | }; |
| 984 | |
| 985 | while let Some(exit) = stage_data.fuzz_one(fuzzer) { |
| 986 | if fuzzer.vm.interrupt_flag.load(std::sync::atomic::Ordering::Relaxed) |
| 987 | || matches!(exit, VmExit::Interrupted) |
| 988 | { |
| 989 | return Ok(StageExit::Interrupted); |
| 990 | } |
| 991 | fuzzer.check_exit_state(exit)?; |
| 992 | stage_data.after_check(fuzzer, fuzzer.state.new_coverage); |
| 993 | fuzzer.update_stats(stats); |
| 994 | } |
| 995 | |
| 996 | stage_data.end(fuzzer); |
| 997 | Ok(StageExit::Skip) |
| 998 | } |
| 999 | } |
| 1000 | |
| 1001 | #[allow(unused)] |
no test coverage detected