Add check for if mutation succeeded, else skip processing (#1265)
This commit is contained in:
parent
659e91fb68
commit
1da621456f
@ -11,7 +11,7 @@ use crate::{
|
|||||||
fuzzer::Evaluator,
|
fuzzer::Evaluator,
|
||||||
inputs::Input,
|
inputs::Input,
|
||||||
mark_feature_time,
|
mark_feature_time,
|
||||||
mutators::Mutator,
|
mutators::{MutationResult, Mutator},
|
||||||
stages::Stage,
|
stages::Stage,
|
||||||
start_timer,
|
start_timer,
|
||||||
state::{HasClientPerfMonitor, HasCorpus, HasRand, UsesState},
|
state::{HasClientPerfMonitor, HasCorpus, HasRand, UsesState},
|
||||||
@ -127,9 +127,13 @@ where
|
|||||||
let mut input = input.clone();
|
let mut input = input.clone();
|
||||||
|
|
||||||
start_timer!(state);
|
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);
|
mark_feature_time!(state, PerfFeature::Mutate);
|
||||||
|
|
||||||
|
if mutated == MutationResult::Skipped {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Time is measured directly the `evaluate_input` function
|
// Time is measured directly the `evaluate_input` function
|
||||||
let (untransformed, post) = input.try_transform_into(state)?;
|
let (untransformed, post) = input.try_transform_into(state)?;
|
||||||
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;
|
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;
|
||||||
|
@ -19,7 +19,7 @@ use crate::{
|
|||||||
feedbacks::{Feedback, FeedbackFactory, HasObserverName},
|
feedbacks::{Feedback, FeedbackFactory, HasObserverName},
|
||||||
inputs::UsesInput,
|
inputs::UsesInput,
|
||||||
mark_feature_time,
|
mark_feature_time,
|
||||||
mutators::Mutator,
|
mutators::{MutationResult, Mutator},
|
||||||
observers::{MapObserver, ObserversTuple},
|
observers::{MapObserver, ObserversTuple},
|
||||||
schedulers::{RemovableScheduler, Scheduler},
|
schedulers::{RemovableScheduler, Scheduler},
|
||||||
stages::Stage,
|
stages::Stage,
|
||||||
@ -97,9 +97,13 @@ where
|
|||||||
state.set_max_size(before_len);
|
state.set_max_size(before_len);
|
||||||
|
|
||||||
start_timer!(state);
|
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);
|
mark_feature_time!(state, PerfFeature::Mutate);
|
||||||
|
|
||||||
|
if mutated == MutationResult::Skipped {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let corpus_idx = if input.len() < before_len {
|
let corpus_idx = if input.len() < before_len {
|
||||||
// run the input
|
// run the input
|
||||||
let exit_kind = fuzzer.execute_input(state, executor, manager, &input)?;
|
let exit_kind = fuzzer.execute_input(state, executor, manager, &input)?;
|
||||||
|
@ -10,7 +10,7 @@ use crate::{
|
|||||||
bolts::{current_time, rands::Rand},
|
bolts::{current_time, rands::Rand},
|
||||||
corpus::{Corpus, CorpusId},
|
corpus::{Corpus, CorpusId},
|
||||||
impl_serdeany, mark_feature_time,
|
impl_serdeany, mark_feature_time,
|
||||||
mutators::Mutator,
|
mutators::{MutationResult, Mutator},
|
||||||
stages::{
|
stages::{
|
||||||
mutational::{MutatedTransform, MutatedTransformPost, DEFAULT_MUTATIONAL_MAX_ITERATIONS},
|
mutational::{MutatedTransform, MutatedTransformPost, DEFAULT_MUTATIONAL_MAX_ITERATIONS},
|
||||||
MutationalStage, Stage,
|
MutationalStage, Stage,
|
||||||
@ -142,9 +142,13 @@ where
|
|||||||
let mut input = input.clone();
|
let mut input = input.clone();
|
||||||
|
|
||||||
start_timer!(state);
|
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);
|
mark_feature_time!(state, PerfFeature::Mutate);
|
||||||
|
|
||||||
|
if mutated == MutationResult::Skipped {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Time is measured directly the `evaluate_input` function
|
// Time is measured directly the `evaluate_input` function
|
||||||
let (untransformed, post) = input.try_transform_into(state)?;
|
let (untransformed, post) = input.try_transform_into(state)?;
|
||||||
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;
|
let (_, corpus_idx) = fuzzer.evaluate_input(state, executor, manager, untransformed)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user