Trait Mutator

Source
pub trait Mutator<I, S>: Named {
    // Required method
    fn mutate(
        &mut self,
        state: &mut S,
        input: &mut I,
    ) -> Result<MutationResult, Error>;

    // Provided method
    fn post_exec(
        &mut self,
        _state: &mut S,
        _new_corpus_id: Option<CorpusId>,
    ) -> Result<(), Error> { ... }
}
Expand description

A Mutator takes an input, and mutates it. Simple as that.

Required Methods§

Source

fn mutate( &mut self, state: &mut S, input: &mut I, ) -> Result<MutationResult, Error>

Mutate a given input

Provided Methods§

Source

fn post_exec( &mut self, _state: &mut S, _new_corpus_id: Option<CorpusId>, ) -> Result<(), Error>

Post-process given the outcome of the execution new_corpus_id will be Some if a new crate::corpus::Testcase was created this execution.

Implementors§

Source§

impl<G, I, S> Mutator<ListInput<I>, S> for GenerateToAppendMutator<G>
where G: Generator<I, S>, I: Input,

Source§

impl<I, K, M, S> Mutator<ListInput<(K, I)>, S> for M

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for libafl::mutators::list::CrossoverInsertMutator
where S: HasCorpus<MultipartInput<I, K>> + HasMaxSize + HasRand, I: Clone, K: Clone,

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for libafl::mutators::list::CrossoverReplaceMutator
where S: HasCorpus<MultipartInput<I, K>> + HasMaxSize + HasRand, I: Clone, K: Clone,

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for RemoveLastEntryMutator
where K: Default,

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for RemoveRandomEntryMutator
where S: HasRand,

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for libafl::mutators::mutations::CrossoverInsertMutator

Source§

impl<I, K, S> Mutator<ListInput<(K, I)>, S> for libafl::mutators::mutations::CrossoverReplaceMutator

Source§

impl<I, M, S> Mutator<ListInput<I>, S> for LastEntryMutator<M>
where M: Mutator<I, S>,

Source§

impl<I, M, S> Mutator<ListInput<I>, S> for RandomEntryMutator<M>
where M: Mutator<I, S>, S: HasRand,

Source§

impl<I, MT, S> Mutator<I, S> for StdMOptMutator<MT>
where MT: MutatorsTuple<I, S>, S: HasRand + HasMetadata + HasCorpus<I> + HasSolutions<I>,

Source§

impl<I, MT, S> Mutator<I, S> for StdScheduledMutator<MT>
where MT: MutatorsTuple<I, S>, S: HasRand,

Source§

impl<I, MT, S> Mutator<I, S> for TuneableScheduledMutator<MT>
where MT: MutatorsTuple<I, S>, S: HasRand + HasMetadata,

Source§

impl<I, O, S, F> Mutator<O, S> for MappedCrossoverMutator<F, I>
where S: HasRand + HasCorpus<I>, for<'b> F: Fn(&'b I) -> &'b O, O: Clone,

Source§

impl<I, S> Mutator<GeneralizedInputMetadata, S> for GrimoireExtensionMutator<I>
where S: HasMetadata + HasRand + HasCorpus<I>,

Source§

impl<I, S> Mutator<GeneralizedInputMetadata, S> for GrimoireRandomDeleteMutator<I>
where S: HasMetadata + HasRand + HasCorpus<I>,

Source§

impl<I, S> Mutator<GeneralizedInputMetadata, S> for GrimoireRecursiveReplacementMutator<I>
where S: HasMetadata + HasRand + HasCorpus<I>,

Source§

impl<I, S> Mutator<GeneralizedInputMetadata, S> for GrimoireStringReplacementMutator<I>
where S: HasMetadata + HasRand + HasCorpus<I>,

Source§

impl<I, S> Mutator<I, S> for libafl::mutators::mutations::BitFlipMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteAddMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteDecMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteFlipMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteIncMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteInterestingMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteNegMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for ByteRandMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for BytesCopyMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for BytesDeleteMutator

Source§

impl<I, S> Mutator<I, S> for BytesExpandMutator

Source§

impl<I, S> Mutator<I, S> for BytesInsertCopyMutator

Source§

impl<I, S> Mutator<I, S> for BytesInsertMutator

Source§

impl<I, S> Mutator<I, S> for BytesRandInsertMutator

Source§

impl<I, S> Mutator<I, S> for BytesRandSetMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for BytesSetMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for BytesSwapMutator

Source§

impl<I, S> Mutator<I, S> for libafl::mutators::mutations::CrossoverInsertMutator

Source§

impl<I, S> Mutator<I, S> for libafl::mutators::mutations::CrossoverReplaceMutator
where I: HasMutatorBytes, S: HasCorpus<I> + HasRand,

Source§

impl<I, S> Mutator<I, S> for DwordAddMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for DwordInterestingMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for QwordAddMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for SpliceMutator

Source§

impl<I, S> Mutator<I, S> for WordAddMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for WordInterestingMutator
where S: HasRand, I: HasMutatorBytes,

Source§

impl<I, S> Mutator<I, S> for libafl::mutators::numeric::BitFlipMutator
where S: HasRand, I: Numeric,

Source§

impl<I, S> Mutator<I, S> for CrossoverMutator
where S: HasRand + HasCorpus<I>, I: Copy,

Source§

impl<I, S> Mutator<I, S> for DecMutator
where I: Numeric,

Source§

impl<I, S> Mutator<I, S> for IncMutator
where I: Numeric,

Source§

impl<I, S> Mutator<I, S> for NegateMutator
where I: Numeric,

Source§

impl<I, S> Mutator<I, S> for RandMutator
where S: HasRand, I: Numeric,

Source§

impl<I, S> Mutator<I, S> for TwosComplementMutator
where I: Numeric,

Source§

impl<I, S> Mutator<I, S> for NopMutator

Source§

impl<I, S> Mutator<I, S> for I2SRandReplace

Source§

impl<I, S> Mutator<I, S> for I2SRandReplaceBinonly

Source§

impl<I, S> Mutator<I, S> for TokenInsert

Source§

impl<I, S> Mutator<I, S> for TokenReplace

Source§

impl<I, S, M> Mutator<Option<I>, S> for OptionalMutator<M>
where M: Mutator<I, S>,

Source§

impl<I, S, SM> Mutator<I, S> for LoggerScheduledMutator<SM>
where S: HasRand + HasCorpus<I>, SM: ScheduledMutator<I, S>, SM::Mutations: MutatorsTuple<I, S> + NamedTuple,

Source§

impl<M, I, S> Mutator<I, S> for MutationChecker<M>
where I: Hash, M: Mutator<I, S>,

Source§

impl<M, S, F, IO, II> Mutator<IO, S> for MappingMutator<M, F>
where F: FnMut(&mut IO) -> &mut II, M: Mutator<II, S>,

Source§

impl<S> Mutator<(ValueInput<Vec<u8>>, UnicodeIdentificationMetadata), S> for UnicodeCategoryRandMutator
where S: HasRand + HasMaxSize,

Source§

impl<S> Mutator<(ValueInput<Vec<u8>>, UnicodeIdentificationMetadata), S> for UnicodeCategoryTokenReplaceMutator

Source§

impl<S> Mutator<(ValueInput<Vec<u8>>, UnicodeIdentificationMetadata), S> for UnicodeSubcategoryRandMutator
where S: HasRand + HasMaxSize,

Source§

impl<S> Mutator<(ValueInput<Vec<u8>>, UnicodeIdentificationMetadata), S> for UnicodeSubcategoryTokenReplaceMutator

Source§

impl<S> Mutator<bool, S> for BoolInvertMutator

Source§

impl<S> Mutator<EncodedInput, S> for EncodedCrossoverInsertMutator

Source§

impl<S> Mutator<EncodedInput, S> for EncodedCrossoverReplaceMutator

Source§

impl<S> Mutator<EncodedInput, S> for EncodedInsertCopyMutator
where S: HasRand + HasMaxSize,

Source§

impl<S> Mutator<GramatronInput, S> for GramatronRandomMutator<'_, S>
where S: HasRand + HasMetadata,

Source§

impl<S> Mutator<GramatronInput, S> for GramatronRecursionMutator
where S: HasRand + HasMetadata,

Source§

impl<S> Mutator<GramatronInput, S> for GramatronSpliceMutator

Source§

impl<S> Mutator<NautilusInput, S> for NautilusSpliceMutator<'_>

Source§

impl<S, F, I1, I2, O> Mutator<I2, S> for MappedCrossoverInsertMutator<F, I1, O>
where F: Fn(&I1) -> &O, I2: ResizableMutator<u8> + HasMutatorBytes, O: IntoOptionBytes, S: HasCorpus<I1> + HasMaxSize + HasRand,

Source§

impl<S, F, I1, I2, O> Mutator<I2, S> for MappedCrossoverReplaceMutator<F, I1, O>
where F: Fn(&I1) -> &O, I2: HasMutatorBytes, O: IntoOptionBytes, S: HasCorpus<I1> + HasMaxSize + HasRand,

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedAddMutator

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedCopyMutator

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedDecMutator

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedDeleteMutator

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedIncMutator

Source§

impl<S: HasRand> Mutator<EncodedInput, S> for EncodedRandMutator

Source§

impl<S: HasRand> Mutator<NautilusInput, S> for NautilusRandomMutator<'_>

Source§

impl<S: HasRand> Mutator<NautilusInput, S> for NautilusRecursionMutator<'_>