Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Rumata888 committed Feb 7, 2025
1 parent e643ab2 commit 7c685d7
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 51 deletions.
4 changes: 2 additions & 2 deletions acvm-repo/acvm/src/pwg/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ impl<'a, F: AcirField, B: BlackBoxFunctionSolver<F>> ACVM<'a, F, B> {

let result = solver.solve().map_err(|err| {
if self.brillig_fuzzing_active {
self.brillig_fuzzing_trace = Some((&solver).get_fuzzing_trace())
self.brillig_fuzzing_trace = Some(solver.get_fuzzing_trace());
};
err
})?;
Expand All @@ -562,7 +562,7 @@ impl<'a, F: AcirField, B: BlackBoxFunctionSolver<F>> ACVM<'a, F, B> {
}
BrilligSolverStatus::Finished => {
if self.brillig_fuzzing_active {
self.brillig_fuzzing_trace = Some(solver.get_fuzzing_trace())
self.brillig_fuzzing_trace = Some(solver.get_fuzzing_trace());
}
// Write execution outputs
if self.profiling_active {
Expand Down
12 changes: 4 additions & 8 deletions tooling/greybox_fuzzer/src/corpus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,9 +240,9 @@ impl TestCaseOrchestrator {
additional_id =
self.executions_per_testcase.iter().map(|(&id, _)| id).choose(prng).unwrap();
}
return (self.current_sequence.testcase_id, Some(additional_id));
(self.current_sequence.testcase_id, Some(additional_id))
} else {
return (self.current_sequence.testcase_id, None);
(self.current_sequence.testcase_id, None)
}
}
}
Expand Down Expand Up @@ -288,12 +288,8 @@ impl Corpus {

/// Get ALL the files that have been added to the corpus all the time (even deprecated ones) and put them into cache
pub fn get_full_stored_corpus(&mut self) -> Vec<TestCase> {
let stored_corpus: Vec<_> = self
.corpus_file_manager
.get_full_corpus()
.into_iter()
.map(|value| TestCase::from(value))
.collect();
let stored_corpus: Vec<_> =
self.corpus_file_manager.get_full_corpus().into_iter().map(TestCase::from).collect();
let id_testcase_pair: Vec<_> =
stored_corpus.iter().map(|x| (x.id(), x.value().clone())).collect();
for (id, input_map) in id_testcase_pair.iter() {
Expand Down
87 changes: 46 additions & 41 deletions tooling/greybox_fuzzer/src/coverage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,8 @@ impl SingleTestCaseCoverage {

// Collect states of all boolean witnesses
for potential_bool_witness_index in potential_bool_witness_list.witness.iter() {
let value = witness_map
.get(&potential_bool_witness_index)
.expect("Witness should be there");
let value =
witness_map.get(potential_bool_witness_index).expect("Witness should be there");
assert!(value.is_zero() || value.is_one());

acir_bool_coverage.push(AcirBoolState {
Expand Down Expand Up @@ -382,49 +381,55 @@ impl AccumulatedFuzzerCoverage {
}
}

// If we've encountered a new minimum, replace everything
if least_different_bits < cmp_approach.closest_bits {
// Remove testcases used in approach at previous difference
add_to_leavers(cmp_approach.maximum_testcase);
add_to_leavers(cmp_approach.closest_bits_testcase);

// Remove testcases used in approach
for i in 0..32 {
add_to_leavers(cmp_approach.testcases_involved[i]);
}
match least_different_bits.cmp(&cmp_approach.closest_bits) {
std::cmp::Ordering::Less => {
// Remove testcases used in approach at previous difference
add_to_leavers(cmp_approach.maximum_testcase);
add_to_leavers(cmp_approach.closest_bits_testcase);

// Register new metrics that have been reached
cmp_approach.closest_bits = least_different_bits;
cmp_approach.encountered_loop_maximum = last_value;
let loop_log_shift = if last_value.is_zero() { 0 } else { last_value.ilog2() + 1 };
cmp_approach.encountered_loop_log2s = 1u32 << loop_log_shift;

// Memorize the testcase that showed this feature
cmp_approach.closest_bits_testcase = Some(new_coverage.testcase_id);
cmp_approach.maximum_testcase = Some(new_coverage.testcase_id);
cmp_approach.testcases_involved = [None; 32];
cmp_approach.testcases_involved[loop_log_shift as usize] =
Some(new_coverage.testcase_id);
// If we've hit the equality case, tracking comparisons makes no sense
if least_different_bits == 0 {
cmp_approach.enabled = false;
println!("Disabled one comparison tracing;");
}
} else if least_different_bits == cmp_approach.closest_bits {
// In case the difference stays the same, observe if there are more repetitions
let prev_value = *cmp_approach;
let loop_log_shift = if last_value.is_zero() { 0 } else { last_value.ilog2() + 1 };
add_to_leavers(cmp_approach.testcases_involved[loop_log_shift as usize]);

cmp_approach.encountered_loop_log2s |= 1u32 << loop_log_shift;
cmp_approach.testcases_involved[loop_log_shift as usize] =
Some(new_coverage.testcase_id);
if last_value > prev_value.encountered_loop_maximum {
// Remove testcases used in approach
for i in 0..32 {
add_to_leavers(cmp_approach.testcases_involved[i]);
}

// Register new metrics that have been reached
cmp_approach.closest_bits = least_different_bits;
cmp_approach.encountered_loop_maximum = last_value;
add_to_leavers(cmp_approach.maximum_testcase);
let loop_log_shift =
if last_value.is_zero() { 0 } else { last_value.ilog2() + 1 };
cmp_approach.encountered_loop_log2s = 1u32 << loop_log_shift;

// Memorize the testcase that showed this feature
cmp_approach.closest_bits_testcase = Some(new_coverage.testcase_id);
cmp_approach.maximum_testcase = Some(new_coverage.testcase_id);
cmp_approach.testcases_involved = [None; 32];
cmp_approach.testcases_involved[loop_log_shift as usize] =
Some(new_coverage.testcase_id);
// If we've hit the equality case, tracking comparisons makes no sense
if least_different_bits == 0 {
cmp_approach.enabled = false;
println!("Disabled one comparison tracing;");
}
}
std::cmp::Ordering::Equal => {
// In case the difference stays the same, observe if there are more repetitions
let prev_value = *cmp_approach;
let loop_log_shift =
if last_value.is_zero() { 0 } else { last_value.ilog2() + 1 };
add_to_leavers(cmp_approach.testcases_involved[loop_log_shift as usize]);

cmp_approach.encountered_loop_log2s |= 1u32 << loop_log_shift;
cmp_approach.testcases_involved[loop_log_shift as usize] =
Some(new_coverage.testcase_id);
if last_value > prev_value.encountered_loop_maximum {
cmp_approach.encountered_loop_maximum = last_value;
add_to_leavers(cmp_approach.maximum_testcase);
cmp_approach.maximum_testcase = Some(new_coverage.testcase_id);
}
}
std::cmp::Ordering::Greater => {}
}
// If we've encountered a new minimum, replace everything
}

// Insert all ACIR states and replace testcase association
Expand Down

0 comments on commit 7c685d7

Please sign in to comment.