diff --git a/fuzzers/fuzzbench_weighted/src/lib.rs b/fuzzers/fuzzbench_weighted/src/lib.rs index 66dfb9a7d5..48e5012ee6 100644 --- a/fuzzers/fuzzbench_weighted/src/lib.rs +++ b/fuzzers/fuzzbench_weighted/src/lib.rs @@ -318,9 +318,9 @@ fn fuzz( let power = StdPowerMutationalStage::new(mutator, &edges_observer); // A minimization+queue policy to get testcasess from the corpus - let scheduler = IndexesLenTimeMinimizerScheduler::new(StdWeightedScheduler::new(Some( + let scheduler = IndexesLenTimeMinimizerScheduler::new(StdWeightedScheduler::with_schedule( PowerSchedule::EXPLORE, - ))); + )); // A fuzzer with feedbacks and a corpus scheduler let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective); diff --git a/fuzzers/libfuzzer_libpng/src/lib.rs b/fuzzers/libfuzzer_libpng/src/lib.rs index 234018c54a..b08e60f656 100644 --- a/fuzzers/libfuzzer_libpng/src/lib.rs +++ b/fuzzers/libfuzzer_libpng/src/lib.rs @@ -141,8 +141,9 @@ fn fuzz(corpus_dirs: &[PathBuf], objective_dir: PathBuf, broker_port: u16) -> Re let mut stages = tuple_list!(calibration, power); // A minimization+queue policy to get testcasess from the corpus - let scheduler = - IndexesLenTimeMinimizerScheduler::new(StdWeightedScheduler::new(Some(PowerSchedule::FAST))); + let scheduler = IndexesLenTimeMinimizerScheduler::new(StdWeightedScheduler::with_schedule( + PowerSchedule::FAST, + )); // A fuzzer with feedbacks and a corpus scheduler let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective); diff --git a/libafl/src/schedulers/weighted.rs b/libafl/src/schedulers/weighted.rs index 76ae1ceb8b..d07ce53604 100644 --- a/libafl/src/schedulers/weighted.rs +++ b/libafl/src/schedulers/weighted.rs @@ -93,17 +93,37 @@ pub struct WeightedScheduler { phantom: PhantomData<(F, I, S)>, } +impl Default for WeightedScheduler +where + F: TestcaseScore, + I: Input, + S: HasCorpus + HasMetadata + HasRand, +{ + fn default() -> Self { + Self::new() + } +} + impl WeightedScheduler where F: TestcaseScore, I: Input, S: HasCorpus + HasMetadata + HasRand, { + /// Create a new [`WeightedScheduler`] without any scheduling strategy + #[must_use] + pub fn new() -> Self { + Self { + strat: None, + phantom: PhantomData, + } + } + /// Create a new [`WeightedScheduler`] #[must_use] - pub fn new(strat: Option) -> Self { + pub fn with_schedule(strat: PowerSchedule) -> Self { Self { - strat, + strat: Some(strat), phantom: PhantomData, } }