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

Method random_replace

hail-fuzz/src/i2s/replacement.rs:60–87  ·  view source on GitHub ↗
(&mut self, fuzzer: &mut Fuzzer)

Source from the content-addressed store, hash-verified

58 }
59
60 pub fn random_replace(&mut self, fuzzer: &mut Fuzzer) -> Option<()> {
61 const MAX_REPLACEMENT_ATTEMPTS: usize = 100;
62
63 let mut num_mutations: u32 = fuzzer.rng.gen_range(1..32);
64 for _ in 0..MAX_REPLACEMENT_ATTEMPTS {
65 let cmp = self.comparisons.select_random(&mut fuzzer.rng);
66 let (_, operands) = self.comparisons.get(cmp)?;
67
68 let (stream_addr, _) = self.streams[self.stream_distr.sample(&mut fuzzer.rng)];
69 let stream = fuzzer.state.input.streams.get_mut(&stream_addr)?;
70
71 if stream.cursor as usize == stream.bytes.len() {
72 continue;
73 }
74 let offset = fuzzer.rng.gen_range(stream.cursor as usize..stream.bytes.len());
75 self.finder.reset(offset);
76
77 if self.finder.find_match(stream, operands) {
78 self.finder.apply_replacement(&mut stream.bytes);
79 num_mutations = match num_mutations.checked_sub(1) {
80 Some(x) => x,
81 None => break,
82 }
83 }
84 }
85
86 Some(())
87 }
88}
89
90pub(crate) struct I2SReplaceStage {

Callers 1

exec_oneMethod · 0.80

Calls 7

select_randomMethod · 0.80
get_mutMethod · 0.80
find_matchMethod · 0.80
apply_replacementMethod · 0.80
getMethod · 0.45
lenMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected