MCPcopy Create free account
hub / github.com/MultiFuzz/MultiFuzz / start

Method start

hail-fuzz/src/i2s/colorization.rs:82–134  ·  view source on GitHub ↗
(fuzzer: &mut Fuzzer)

Source from the content-addressed store, hash-verified

80 }
81
82 pub fn start(fuzzer: &mut Fuzzer) -> Result<Self, StageExit>
83 where
84 Self: Sized,
85 {
86 let input_id = fuzzer.input_id.ok_or(StageExit::Skip)?;
87
88 fuzzer.copy_current_input();
89 fuzzer.reset_input_cursor().unwrap();
90 let mut mutated_input = fuzzer.state.input.clone();
91 randomize_input(&mut fuzzer.rng, &mut mutated_input);
92
93 Snapshot::restore_initial(fuzzer);
94 fuzzer.write_input_to_target().unwrap();
95 fuzzer.execute().ok_or(StageExit::Interrupted)?;
96 let original_icount = fuzzer.vm.cpu.icount();
97
98 // If this input was generated via length extension, then we only try and colorize the newly
99 // extended bytes.
100 let prefix_bytes = match fuzzer.features.skip_prefix {
101 true => crate::utils::count_parent_prefix(fuzzer, input_id, true),
102 false => HashMap::new(),
103 };
104
105 let max_len = fuzzer.features.max_i2s_bytes;
106
107 let mut remaining_streams = vec![];
108 for (addr, stream) in &fuzzer.state.input.streams {
109 if !stream.bytes.is_empty() {
110 let max_len = prefix_bytes
111 .get(addr)
112 .map_or(max_len.min(stream.bytes.len()) as u32, |prefix| {
113 (stream.bytes.len() - *prefix) as u32
114 });
115 tracing::debug!(
116 "{addr:#x}: colorizing up to {max_len} of {} bytes",
117 stream.bytes.len()
118 );
119 remaining_streams.push((*addr, max_len));
120 }
121 }
122
123 Ok(Self {
124 input_id,
125 attempts: 0,
126 mutated_input,
127 remaining_streams,
128 ranges: std::collections::BinaryHeap::default(),
129 untainted_ranges: vec![],
130 colorized_bytes: HashMap::default(),
131 original_icount,
132 total_execs: 0,
133 })
134 }
135
136 fn fuzz_one(&mut self, fuzzer: &mut Fuzzer) -> Option<()> {
137 let range = self.next_range()?;

Callers

nothing calls this directly

Calls 10

randomize_inputFunction · 0.85
count_parent_prefixFunction · 0.85
copy_current_inputMethod · 0.80
reset_input_cursorMethod · 0.80
cloneMethod · 0.80
write_input_to_targetMethod · 0.80
executeMethod · 0.80
is_emptyMethod · 0.80
getMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected