pub struct StdFuzzer<CS, F, IC, IF, OF> { /* private fields */ }
Expand description
Your default fuzzer instance, for everyday use.
Implementations§
Source§impl<CS, F, OF> StdFuzzer<CS, F, NopBytesConverter, NopInputFilter, OF>
impl<CS, F, OF> StdFuzzer<CS, F, NopBytesConverter, NopInputFilter, OF>
Trait Implementations§
Source§impl<CS: Debug, F: Debug, IC: Debug, IF: Debug, OF: Debug> Debug for StdFuzzer<CS, F, IC, IF, OF>
impl<CS: Debug, F: Debug, IC: Debug, IF: Debug, OF: Debug> Debug for StdFuzzer<CS, F, IC, IF, OF>
Source§impl<CS, E, EM, F, I, IC, IF, OF, S> Evaluator<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: MatchName + ObserversTuple<I, S> + Serialize,
EM: EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + MaybeHasClientPerfMonitor + HasCurrentTestcase<I> + HasLastFoundTime + HasExecutions,
I: Input,
IF: InputFilter<I>,
impl<CS, E, EM, F, I, IC, IF, OF, S> Evaluator<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: MatchName + ObserversTuple<I, S> + Serialize,
EM: EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + MaybeHasClientPerfMonitor + HasCurrentTestcase<I> + HasLastFoundTime + HasExecutions,
I: Input,
IF: InputFilter<I>,
Source§fn evaluate_input(
&mut self,
state: &mut S,
executor: &mut E,
manager: &mut EM,
input: &I,
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
fn evaluate_input( &mut self, state: &mut S, executor: &mut E, manager: &mut EM, input: &I, ) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
Process one input, adding to the respective corpora if needed and firing the right events
Source§fn add_input(
&mut self,
state: &mut S,
executor: &mut E,
manager: &mut EM,
input: I,
) -> Result<(CorpusId, ExecuteInputResult), Error>
fn add_input( &mut self, state: &mut S, executor: &mut E, manager: &mut EM, input: I, ) -> Result<(CorpusId, ExecuteInputResult), Error>
Adds an input, even if it’s not considered interesting
by any of the executors
If you are using inprocess executor, be careful.
Your crash-causing testcase will NOT be added into the corpus (only to solution)
Source§fn evaluate_filtered(
&mut self,
state: &mut S,
executor: &mut E,
manager: &mut EM,
input: &I,
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
fn evaluate_filtered( &mut self, state: &mut S, executor: &mut E, manager: &mut EM, input: &I, ) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
Runs the input if it was (likely) not previously run and triggers observers and feedback and adds the input to the previously executed list
if it is interesting, returns an (option) the index of the new
Testcase
in the corpusSource§fn add_disabled_input(
&mut self,
state: &mut S,
input: I,
) -> Result<CorpusId, Error>
fn add_disabled_input( &mut self, state: &mut S, input: I, ) -> Result<CorpusId, Error>
Adds the input to the corpus as a disabled input.
Used during initial corpus loading.
Disabled testcases are only used for splicing
Returns the
index
of the new testcase in the corpus.
Usually, you want to use Evaluator::evaluate_input
, unless you know what you are doing.Source§impl<CS, E, EM, F, I, IC, IF, OF, S> EvaluatorObservers<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: MatchName + ObserversTuple<I, S> + Serialize,
EM: EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + MaybeHasClientPerfMonitor + HasCurrentTestcase<I> + HasExecutions + HasLastFoundTime,
I: Input,
impl<CS, E, EM, F, I, IC, IF, OF, S> EvaluatorObservers<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: MatchName + ObserversTuple<I, S> + Serialize,
EM: EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + MaybeHasClientPerfMonitor + HasCurrentTestcase<I> + HasExecutions + HasLastFoundTime,
I: Input,
Source§impl<CS, E, EM, F, I, IC, IF, OF, S> EventProcessor<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: DeserializeOwned + Serialize + ObserversTuple<I, S>,
EM: EventReceiver<I, S> + EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
I: Input,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + HasExecutions + HasLastFoundTime + MaybeHasClientPerfMonitor + HasCurrentCorpusId + HasImported,
impl<CS, E, EM, F, I, IC, IF, OF, S> EventProcessor<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: DeserializeOwned + Serialize + ObserversTuple<I, S>,
EM: EventReceiver<I, S> + EventFirer<I, S>,
F: Feedback<EM, I, E::Observers, S>,
I: Input,
OF: Feedback<EM, I, E::Observers, S>,
S: HasCorpus<I> + HasSolutions<I> + HasExecutions + HasLastFoundTime + MaybeHasClientPerfMonitor + HasCurrentCorpusId + HasImported,
Source§impl<CS, E, EM, F, I, IC, IF, OF, S> ExecutesInput<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: Executor<EM, I, S, Self> + HasObservers,
E::Observers: ObserversTuple<I, S>,
S: HasExecutions + HasCorpus<I> + MaybeHasClientPerfMonitor,
impl<CS, E, EM, F, I, IC, IF, OF, S> ExecutesInput<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: Executor<EM, I, S, Self> + HasObservers,
E::Observers: ObserversTuple<I, S>,
S: HasExecutions + HasCorpus<I> + MaybeHasClientPerfMonitor,
Source§impl<CS, EM, F, I, IC, IF, OF, OT, S> ExecutionProcessor<EM, I, OT, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
EM: EventFirer<I, S>,
F: Feedback<EM, I, OT, S>,
I: Input,
OF: Feedback<EM, I, OT, S>,
OT: ObserversTuple<I, S> + Serialize,
S: HasCorpus<I> + MaybeHasClientPerfMonitor + HasExecutions + HasCurrentTestcase<I> + HasSolutions<I> + HasLastFoundTime,
impl<CS, EM, F, I, IC, IF, OF, OT, S> ExecutionProcessor<EM, I, OT, S> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
EM: EventFirer<I, S>,
F: Feedback<EM, I, OT, S>,
I: Input,
OF: Feedback<EM, I, OT, S>,
OT: ObserversTuple<I, S> + Serialize,
S: HasCorpus<I> + MaybeHasClientPerfMonitor + HasExecutions + HasCurrentTestcase<I> + HasSolutions<I> + HasLastFoundTime,
Source§fn process_execution(
&mut self,
state: &mut S,
manager: &mut EM,
input: &I,
exec_res: &ExecuteInputResult,
exit_kind: &ExitKind,
observers: &OT,
) -> Result<Option<CorpusId>, Error>
fn process_execution( &mut self, state: &mut S, manager: &mut EM, input: &I, exec_res: &ExecuteInputResult, exit_kind: &ExitKind, observers: &OT, ) -> Result<Option<CorpusId>, Error>
Post process a testcase depending the testcase execution results returns corpus id if it put something into corpus (not solution) This code will not be reached by inprocess executor if crash happened.
Source§fn check_results(
&mut self,
state: &mut S,
manager: &mut EM,
input: &I,
observers: &OT,
exit_kind: &ExitKind,
) -> Result<ExecuteInputResult, Error>
fn check_results( &mut self, state: &mut S, manager: &mut EM, input: &I, observers: &OT, exit_kind: &ExitKind, ) -> Result<ExecuteInputResult, Error>
Check the outcome of the execution, find if it is worth for corpus or objectives
Source§fn serialize_and_dispatch(
&mut self,
state: &mut S,
manager: &mut EM,
input: &I,
exec_res: &ExecuteInputResult,
observers: &OT,
exit_kind: &ExitKind,
) -> Result<(), Error>
fn serialize_and_dispatch( &mut self, state: &mut S, manager: &mut EM, input: &I, exec_res: &ExecuteInputResult, observers: &OT, exit_kind: &ExitKind, ) -> Result<(), Error>
serialize and send event via manager
Source§impl<CS, E, EM, F, I, IC, IF, OF, S, ST> Fuzzer<E, EM, I, S, ST> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: DeserializeOwned + Serialize + ObserversTuple<I, S>,
EM: EventFirer<I, S> + ProgressReporter<S> + SendExiting + EventReceiver<I, S>,
I: Input,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasExecutions + HasMetadata + HasCorpus<I> + HasSolutions<I> + HasLastReportTime + HasLastFoundTime + HasImported + HasTestcase<I> + HasCurrentCorpusId + HasCurrentStageId + Stoppable + MaybeHasClientPerfMonitor,
ST: StagesTuple<E, EM, S, Self>,
impl<CS, E, EM, F, I, IC, IF, OF, S, ST> Fuzzer<E, EM, I, S, ST> for StdFuzzer<CS, F, IC, IF, OF>where
CS: Scheduler<I, S>,
E: HasObservers + Executor<EM, I, S, Self>,
E::Observers: DeserializeOwned + Serialize + ObserversTuple<I, S>,
EM: EventFirer<I, S> + ProgressReporter<S> + SendExiting + EventReceiver<I, S>,
I: Input,
F: Feedback<EM, I, E::Observers, S>,
OF: Feedback<EM, I, E::Observers, S>,
S: HasExecutions + HasMetadata + HasCorpus<I> + HasSolutions<I> + HasLastReportTime + HasLastFoundTime + HasImported + HasTestcase<I> + HasCurrentCorpusId + HasCurrentStageId + Stoppable + MaybeHasClientPerfMonitor,
ST: StagesTuple<E, EM, S, Self>,
Source§fn fuzz_one(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut S,
manager: &mut EM,
) -> Result<CorpusId, Error>
fn fuzz_one( &mut self, stages: &mut ST, executor: &mut E, state: &mut S, manager: &mut EM, ) -> Result<CorpusId, Error>
Fuzz for a single iteration.
Returns the index of the last fuzzed corpus item.
(Note: An iteration represents a complete run of every stage.
Therefore, it does not mean that the harness is executed for once,
because each stage could run the harness for multiple times) Read more
Source§fn fuzz_loop(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut S,
manager: &mut EM,
) -> Result<(), Error>
fn fuzz_loop( &mut self, stages: &mut ST, executor: &mut E, state: &mut S, manager: &mut EM, ) -> Result<(), Error>
Fuzz forever (or until stopped)
Source§fn fuzz_loop_for(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut S,
manager: &mut EM,
iters: u64,
) -> Result<CorpusId, Error>
fn fuzz_loop_for( &mut self, stages: &mut ST, executor: &mut E, state: &mut S, manager: &mut EM, iters: u64, ) -> Result<CorpusId, Error>
Fuzz for n iterations.
Returns the index of the last fuzzed corpus item.
(Note: An iteration represents a complete run of every stage.
therefore the number n is not always equal to the number of the actual harness executions,
because each stage could run the harness for multiple times) Read more
Source§impl<CS, F, IC, IF, OF> HasBytesConverter for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> HasBytesConverter for StdFuzzer<CS, F, IC, IF, OF>
Source§impl<CS, F, IC, IF, OF> HasFeedback for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> HasFeedback for StdFuzzer<CS, F, IC, IF, OF>
Source§impl<CS, F, IC, IF, OF> HasObjective for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> HasObjective for StdFuzzer<CS, F, IC, IF, OF>
Source§fn objective_mut(&mut self) -> &mut OF
fn objective_mut(&mut self) -> &mut OF
The objective feedback (mutable)
Sets whether to share objectives among nodes
Whether to share objective testcases among fuzzing nodes
Auto Trait Implementations§
impl<CS, F, IC, IF, OF> Freeze for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> RefUnwindSafe for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> Send for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> Sync for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> Unpin for StdFuzzer<CS, F, IC, IF, OF>
impl<CS, F, IC, IF, OF> UnwindSafe for StdFuzzer<CS, F, IC, IF, OF>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.