pub struct StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor,{ /* private fields */ }
Expand description
Your default fuzzer instance, for everyday use.
Implementations§
source§impl<CS, F, OF, OT> StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: UsesInput + HasExecutions + HasClientPerfMonitor,
impl<CS, F, OF, OT> StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: UsesInput + HasExecutions + HasClientPerfMonitor,
sourcepub fn new(scheduler: CS, feedback: F, objective: OF) -> Self
pub fn new(scheduler: CS, feedback: F, objective: OF) -> Self
Create a new StdFuzzer
with standard behavior.
sourcepub fn execute_input<E, EM>(
&mut self,
state: &mut CS::State,
executor: &mut E,
event_mgr: &mut EM,
input: &<CS::State as UsesInput>::Input
) -> Result<ExitKind, Error>where
E: Executor<EM, Self> + HasObservers<Observers = OT, State = CS::State>,
EM: UsesState<State = CS::State>,
OT: ObserversTuple<CS::State>,
pub fn execute_input<E, EM>(
&mut self,
state: &mut CS::State,
executor: &mut E,
event_mgr: &mut EM,
input: &<CS::State as UsesInput>::Input
) -> Result<ExitKind, Error>where
E: Executor<EM, Self> + HasObservers<Observers = OT, State = CS::State>,
EM: UsesState<State = CS::State>,
OT: ObserversTuple<CS::State>,
Runs the input and triggers observers and feedback
Trait Implementations§
source§impl<CS, F, OF, OT: Debug> Debug for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler + Debug,
F: Feedback<CS::State> + Debug,
OF: Feedback<CS::State> + Debug,
CS::State: HasClientPerfMonitor,
impl<CS, F, OF, OT: Debug> Debug for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler + Debug,
F: Feedback<CS::State> + Debug,
OF: Feedback<CS::State> + Debug,
CS::State: HasClientPerfMonitor,
source§impl<CS, E, EM, F, OF, OT> Evaluator<E, EM> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
E: HasObservers<State = CS::State, Observers = OT> + Executor<EM, Self>,
EM: EventFirer<State = CS::State>,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
impl<CS, E, EM, F, OF, OT> Evaluator<E, EM> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
E: HasObservers<State = CS::State, Observers = OT> + Executor<EM, Self>,
EM: EventFirer<State = CS::State>,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
source§fn evaluate_input_events(
&mut self,
state: &mut CS::State,
executor: &mut E,
manager: &mut EM,
input: <CS::State as UsesInput>::Input,
send_events: bool
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
fn evaluate_input_events(
&mut self,
state: &mut CS::State,
executor: &mut E,
manager: &mut EM,
input: <CS::State as UsesInput>::Input,
send_events: bool
) -> 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 CS::State,
executor: &mut E,
manager: &mut EM,
input: <CS::State as UsesInput>::Input
) -> Result<CorpusId, Error>
fn add_input(
&mut self,
state: &mut CS::State,
executor: &mut E,
manager: &mut EM,
input: <CS::State as UsesInput>::Input
) -> Result<CorpusId, Error>
Adds an input, even if it’s not considered interesting
by any of the executors
source§fn evaluate_input(
&mut self,
state: &mut Self::State,
executor: &mut E,
manager: &mut EM,
input: <Self::State as UsesInput>::Input
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
fn evaluate_input(
&mut self,
state: &mut Self::State,
executor: &mut E,
manager: &mut EM,
input: <Self::State as UsesInput>::Input
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>
Runs the input and triggers observers and feedback,
returns if is interesting an (option) the index of the new
crate::corpus::Testcase
in the corpussource§impl<CS, F, OF, OT> EvaluatorObservers<OT> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
impl<CS, F, OF, OT> EvaluatorObservers<OT> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
source§fn evaluate_input_with_observers<E, EM>(
&mut self,
state: &mut Self::State,
executor: &mut E,
manager: &mut EM,
input: <Self::State as UsesInput>::Input,
send_events: bool
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>where
E: Executor<EM, Self> + HasObservers<Observers = OT, State = Self::State>,
EM: EventFirer<State = Self::State>,
fn evaluate_input_with_observers<E, EM>(
&mut self,
state: &mut Self::State,
executor: &mut E,
manager: &mut EM,
input: <Self::State as UsesInput>::Input,
send_events: bool
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>where
E: Executor<EM, Self> + HasObservers<Observers = OT, State = Self::State>,
EM: EventFirer<State = Self::State>,
Process one input, adding to the respective corpora if needed and firing the right events
source§impl<CS, E, EM, F, OF> ExecutesInput<E, EM> for StdFuzzer<CS, F, OF, E::Observers>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
E: Executor<EM, Self> + HasObservers<State = CS::State>,
EM: UsesState<State = CS::State>,
CS::State: UsesInput + HasExecutions + HasClientPerfMonitor,
impl<CS, E, EM, F, OF> ExecutesInput<E, EM> for StdFuzzer<CS, F, OF, E::Observers>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
E: Executor<EM, Self> + HasObservers<State = CS::State>,
EM: UsesState<State = CS::State>,
CS::State: UsesInput + HasExecutions + HasClientPerfMonitor,
source§impl<CS, F, OF, OT> ExecutionProcessor<OT> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
impl<CS, F, OF, OT> ExecutionProcessor<OT> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
OT: ObserversTuple<CS::State> + Serialize + DeserializeOwned,
CS::State: HasCorpus + HasSolutions + HasClientPerfMonitor + HasExecutions,
source§fn process_execution<EM>(
&mut self,
state: &mut CS::State,
manager: &mut EM,
input: <CS::State as UsesInput>::Input,
observers: &OT,
exit_kind: &ExitKind,
send_events: bool
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>where
EM: EventFirer<State = Self::State>,
fn process_execution<EM>(
&mut self,
state: &mut CS::State,
manager: &mut EM,
input: <CS::State as UsesInput>::Input,
observers: &OT,
exit_kind: &ExitKind,
send_events: bool
) -> Result<(ExecuteInputResult, Option<CorpusId>), Error>where
EM: EventFirer<State = Self::State>,
Evaluate if a set of observation channels has an interesting state
source§impl<CS, E, EM, F, OF, OT, ST> Fuzzer<E, EM, ST> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
E: UsesState<State = CS::State>,
EM: ProgressReporter + EventProcessor<E, Self, State = CS::State>,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor + HasExecutions + HasMetadata,
ST: StagesTuple<E, EM, CS::State, Self>,
impl<CS, E, EM, F, OF, OT, ST> Fuzzer<E, EM, ST> for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
E: UsesState<State = CS::State>,
EM: ProgressReporter + EventProcessor<E, Self, State = CS::State>,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor + HasExecutions + HasMetadata,
ST: StagesTuple<E, EM, CS::State, Self>,
source§fn fuzz_one(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut CS::State,
manager: &mut EM
) -> Result<CorpusId, Error>
fn fuzz_one(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut CS::State,
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 EM::State,
manager: &mut EM
) -> Result<CorpusId, Error>
fn fuzz_loop(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut EM::State,
manager: &mut EM
) -> Result<CorpusId, Error>
Fuzz forever (or until stopped)
source§fn fuzz_loop_for(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut EM::State,
manager: &mut EM,
iters: u64
) -> Result<CorpusId, Error>
fn fuzz_loop_for(
&mut self,
stages: &mut ST,
executor: &mut E,
state: &mut EM::State,
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, OF, OT> HasFeedback for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor,
impl<CS, F, OF, OT> HasFeedback for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor,
source§impl<CS, F, OF, OT> HasObjective for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor,
impl<CS, F, OF, OT> HasObjective for StdFuzzer<CS, F, OF, OT>where
CS: Scheduler,
F: Feedback<CS::State>,
OF: Feedback<CS::State>,
CS::State: HasClientPerfMonitor,
Auto Trait Implementations§
impl<CS, F, OF, OT> RefUnwindSafe for StdFuzzer<CS, F, OF, OT>where
CS: RefUnwindSafe,
F: RefUnwindSafe,
OF: RefUnwindSafe,
OT: RefUnwindSafe,
impl<CS, F, OF, OT> Send for StdFuzzer<CS, F, OF, OT>where
CS: Send,
F: Send,
OF: Send,
OT: Send,
impl<CS, F, OF, OT> Sync for StdFuzzer<CS, F, OF, OT>where
CS: Sync,
F: Sync,
OF: Sync,
OT: Sync,
impl<CS, F, OF, OT> Unpin for StdFuzzer<CS, F, OF, OT>where
CS: Unpin,
F: Unpin,
OF: Unpin,
OT: Unpin,
impl<CS, F, OF, OT> UnwindSafe for StdFuzzer<CS, F, OF, OT>where
CS: UnwindSafe,
F: UnwindSafe,
OF: UnwindSafe,
OT: UnwindSafe,
Blanket Implementations§
source§impl<Tail, T> Prepend<T> for Tail
impl<Tail, T> Prepend<T> for Tail
§type PreprendResult = Tail
type PreprendResult = Tail
The Resulting
TupleList
, of an Prepend::prepend()
call,
including the prepended entry.source§fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
Prepend a value to this tuple, returning a new tuple with prepended value.