diff --git a/fuzzers/libfuzzer_libpng/src/lib.rs b/fuzzers/libfuzzer_libpng/src/lib.rs index 782fae3cde..b465422568 100644 --- a/fuzzers/libfuzzer_libpng/src/lib.rs +++ b/fuzzers/libfuzzer_libpng/src/lib.rs @@ -131,7 +131,7 @@ fn fuzz(corpus_dirs: &[PathBuf], objective_dir: PathBuf, broker_port: u16) -> Re let calibration = CalibrationStage::new(&edges_observer); let power = - StdPowerMutationalStage::new(&mut state, mutator, &edges_observer, PowerSchedule::FAST); + StdPowerMutationalStage::new(&mut state, mutator, &edges_observer, PowerSchedule::COE); let mut stages = tuple_list!(calibration, power); diff --git a/libafl/src/schedulers/probabilistic_sampling.rs b/libafl/src/schedulers/probabilistic_sampling.rs index f5fd3d0b5a..8ff6cd0ab3 100644 --- a/libafl/src/schedulers/probabilistic_sampling.rs +++ b/libafl/src/schedulers/probabilistic_sampling.rs @@ -111,13 +111,16 @@ where let meta = state.metadata().get::().unwrap(); let threshold = meta.total_probability * rand_prob; let mut k: f64 = 0.0; + let mut ret = *meta.map.keys().last().unwrap(); for (idx, prob) in meta.map.iter() { k += prob; if k >= threshold { - return Ok(*idx); + ret = *idx; + break; } } - Ok(*meta.map.keys().last().unwrap()) + *state.corpus_mut().current_mut() = Some(ret); + Ok(ret) } } } diff --git a/libafl/src/schedulers/testcase_score.rs b/libafl/src/schedulers/testcase_score.rs index 59229fa566..90f1606e4e 100644 --- a/libafl/src/schedulers/testcase_score.rs +++ b/libafl/src/schedulers/testcase_score.rs @@ -86,16 +86,27 @@ where let corpus = state.corpus(); let mut n_paths = 0; let mut v = 0.0; + let cur_index = state.corpus().current().unwrap(); for idx in 0..corpus.count() { - let n_fuzz_entry = corpus - .get(idx)? - .borrow() - .metadata() - .get::() - .ok_or_else(|| { - Error::KeyNotFound("PowerScheduleTestData not found".to_string()) - })? - .n_fuzz_entry(); + let n_fuzz_entry = if cur_index == idx { + entry + .metadata() + .get::() + .ok_or_else(|| { + Error::KeyNotFound("PowerScheduleTestData not found".to_string()) + })? + .n_fuzz_entry() + } else { + corpus + .get(idx)? + .borrow() + .metadata() + .get::() + .ok_or_else(|| { + Error::KeyNotFound("PowerScheduleTestData not found".to_string()) + })? + .n_fuzz_entry() + }; v += libm::log2(f64::from(psmeta.n_fuzz()[n_fuzz_entry])); n_paths += 1; } diff --git a/libafl/src/schedulers/weighted.rs b/libafl/src/schedulers/weighted.rs index c3ee9ef987..fba9cd9de6 100644 --- a/libafl/src/schedulers/weighted.rs +++ b/libafl/src/schedulers/weighted.rs @@ -285,7 +285,7 @@ where })?; psmeta.set_queue_cycles(psmeta.queue_cycles() + 1); } - + *state.corpus_mut().current_mut() = Some(idx); Ok(idx) } }