Add check for if mutation succeeded, else skip processing (#1265)

This commit is contained in:
Addison Crump 2023-05-14 12:03:25 +02:00 committed by GitHub
parent 659e91fb68
commit 1da621456f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 6 deletions

View File

@ -11,7 +11,7 @@ use crate::{
fuzzer::Evaluator,
inputs::Input,
mark_feature_time,
mutators::Mutator,
mutators::{MutationResult, Mutator},
stages::Stage,
start_timer,
state::{HasClientPerfMonitor, HasCorpus, HasRand, UsesState},
@ -127,9 +127,13 @@ where
let mut input = input.clone();
start_timer!(state);
self.mutator_mut().mutate(state, &mut input, i as i32)?;
let mutated = self.mutator_mut().mutate(state, &mut input, i as i32)?;
mark_feature_time!(state, PerfFeature::Mutate);
if mutated == MutationResult::Skipped {
continue;
}
// Time is measured directly the `evaluate_input` function
let (untransformed, post) = input.try_transform_into(state)?;
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;

View File

@ -19,7 +19,7 @@ use crate::{
feedbacks::{Feedback, FeedbackFactory, HasObserverName},
inputs::UsesInput,
mark_feature_time,
mutators::Mutator,
mutators::{MutationResult, Mutator},
observers::{MapObserver, ObserversTuple},
schedulers::{RemovableScheduler, Scheduler},
stages::Stage,
@ -97,9 +97,13 @@ where
state.set_max_size(before_len);
start_timer!(state);
self.mutator_mut().mutate(state, &mut input, i as i32)?;
let mutated = self.mutator_mut().mutate(state, &mut input, i as i32)?;
mark_feature_time!(state, PerfFeature::Mutate);
if mutated == MutationResult::Skipped {
continue;
}
let corpus_idx = if input.len() < before_len {
// run the input
let exit_kind = fuzzer.execute_input(state, executor, manager, &input)?;

View File

@ -10,7 +10,7 @@ use crate::{
bolts::{current_time, rands::Rand},
corpus::{Corpus, CorpusId},
impl_serdeany, mark_feature_time,
mutators::Mutator,
mutators::{MutationResult, Mutator},
stages::{
mutational::{MutatedTransform, MutatedTransformPost, DEFAULT_MUTATIONAL_MAX_ITERATIONS},
MutationalStage, Stage,
@ -142,9 +142,13 @@ where
let mut input = input.clone();
start_timer!(state);
self.mutator_mut().mutate(state, &mut input, i as i32)?;
let mutated = self.mutator_mut().mutate(state, &mut input, i as i32)?;
mark_feature_time!(state, PerfFeature::Mutate);
if mutated == MutationResult::Skipped {
continue;
}
// Time is measured directly the `evaluate_input` function
let (untransformed, post) = input.try_transform_into(state)?;
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;