Struct StdFuzzer

Source
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>

Source

pub fn new(scheduler: CS, feedback: F, objective: OF) -> Self

Create a new StdFuzzer with standard behavior and no duplicate input execution filtering.

Trait Implementations§

Source§

impl<CS: Debug, F: Debug, IC: Debug, IF: Debug, OF: Debug> Debug for StdFuzzer<CS, F, IC, IF, OF>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
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>,

Source§

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>

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>

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 corpus
Source§

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,

Source§

fn evaluate_input_with_observers( &mut self, state: &mut S, executor: &mut E, manager: &mut EM, input: &I, send_events: bool, ) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>

Process one input, adding to the respective corpora if needed and firing the right events

Source§

impl<CS, E, EM, F, I, IC, IF, OF, S> EventProcessor<E, EM, I, S> for StdFuzzer<CS, F, IC, IF, OF>

Source§

fn process_events( &mut self, state: &mut S, executor: &mut E, manager: &mut EM, ) -> Result<(), Error>

Asks event manager to see if there’s any event to evaluate If there is any, then evaluates it. After, run the post processing routines, for example, re-sending the events to the other
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,

Source§

fn execute_input( &mut self, state: &mut S, executor: &mut E, event_mgr: &mut EM, input: &I, ) -> Result<ExitKind, Error>

Runs the input and triggers observers and feedback

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,

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>

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>

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>

serialize and send event via manager
Source§

fn dispatch_event( &mut self, state: &mut S, manager: &mut EM, input: &I, exec_res: &ExecuteInputResult, observers_buf: Option<Vec<u8>>, exit_kind: &ExitKind, ) -> Result<(), Error>

send event via manager
Source§

fn evaluate_execution( &mut self, state: &mut S, manager: &mut EM, input: &I, observers: &OT, exit_kind: &ExitKind, send_events: bool, ) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>

Evaluate if a set of observation channels has an interesting state
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>

Source§

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>

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>

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>

Source§

type Converter = IC

The converter itself
Source§

fn converter(&self) -> &Self::Converter

the input converter
Source§

fn converter_mut(&mut self) -> &mut Self::Converter

the input converter(mut)
Source§

impl<CS, F, IC, IF, OF> HasFeedback for StdFuzzer<CS, F, IC, IF, OF>

Source§

type Feedback = F

The feedback type
Source§

fn feedback(&self) -> &Self::Feedback

The feedback
Source§

fn feedback_mut(&mut self) -> &mut Self::Feedback

The feedback (mutable)
Source§

impl<CS, F, IC, IF, OF> HasObjective for StdFuzzer<CS, F, IC, IF, OF>

Source§

type Objective = OF

The type of the Feedback used to find objectives for this fuzzer
Source§

fn objective(&self) -> &OF

The objective feedback
Source§

fn objective_mut(&mut self) -> &mut OF

The objective feedback (mutable)
Source§

fn set_share_objectives(&mut self, share_objectives: bool)

Sets whether to share objectives among nodes
Source§

fn share_objectives(&self) -> bool

Whether to share objective testcases among fuzzing nodes
Source§

impl<CS, F, I, IC, IF, OF, S> HasScheduler<I, S> for StdFuzzer<CS, F, IC, IF, OF>
where CS: Scheduler<I, S>,

Source§

type Scheduler = CS

The Scheduler for this fuzzer
Source§

fn scheduler(&self) -> &CS

The scheduler
Source§

fn scheduler_mut(&mut self) -> &mut CS

The scheduler (mutable)

Auto Trait Implementations§

§

impl<CS, F, IC, IF, OF> Freeze for StdFuzzer<CS, F, IC, IF, OF>
where CS: Freeze, F: Freeze, OF: Freeze, IC: Freeze, IF: Freeze,

§

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>
where CS: Send, F: Send, OF: Send, IC: Send, IF: Send,

§

impl<CS, F, IC, IF, OF> Sync for StdFuzzer<CS, F, IC, IF, OF>
where CS: Sync, F: Sync, OF: Sync, IC: Sync, IF: Sync,

§

impl<CS, F, IC, IF, OF> Unpin for StdFuzzer<CS, F, IC, IF, OF>
where CS: Unpin, F: Unpin, OF: Unpin, IC: Unpin, IF: Unpin,

§

impl<CS, F, IC, IF, OF> UnwindSafe for StdFuzzer<CS, F, IC, IF, OF>
where CS: UnwindSafe, F: UnwindSafe, OF: UnwindSafe, IC: UnwindSafe, IF: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<Head, T> Append<T> for Head

Source§

fn append(self, value: T) -> (Head, T)

Append Value and return the tuple
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

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,

Causes self to use its Display implementation when Debug-formatted.
Source§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

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,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<Tail, T> Prepend<T> for Tail

Source§

fn prepend(self, value: T) -> (T, Tail)

Prepend a value to this tuple, returning a new tuple with prepended value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

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

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
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSend for T

Source§

impl<T> Ungil for T
where T: Send,