(&mut self, fuzzer: &mut Fuzzer)
| 107 | } |
| 108 | |
| 109 | fn exec_one(&mut self, fuzzer: &mut Fuzzer) -> Option<VmExit> { |
| 110 | Snapshot::restore_prefix(fuzzer); |
| 111 | fuzzer.state.input.clone_from(&self.current_input); |
| 112 | |
| 113 | match self.i2s_data.as_mut() { |
| 114 | Some(data) => { |
| 115 | fuzzer.stage = Stage::MultiStreamExtendI2S; |
| 116 | Snapshot::restore_initial(fuzzer); |
| 117 | fuzzer.state.input.seek_to_start(); |
| 118 | let _ = data.random_replace(fuzzer); |
| 119 | match self.i2s_replacement_attempts.checked_sub(1) { |
| 120 | Some(new) => self.i2s_replacement_attempts = new, |
| 121 | None => self.i2s_data = None, |
| 122 | } |
| 123 | } |
| 124 | None => { |
| 125 | fuzzer.stage = Stage::MultiStreamExtend; |
| 126 | self.extend_current_input(fuzzer) |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | fuzzer.write_input_to_target().unwrap(); |
| 131 | let exit = fuzzer.execute()?; |
| 132 | fuzzer.auto_trim_input().ok()?; |
| 133 | |
| 134 | Some(exit) |
| 135 | } |
| 136 | |
| 137 | fn extend_current_input(&mut self, fuzzer: &mut Fuzzer) { |
| 138 | let num_extensions = crate::utils::rand_pow2(&mut fuzzer.rng, self.log2_max_extensions); |
no test coverage detected