From 6243b684f817644a16c0f40c460304f1e2f9eb06 Mon Sep 17 00:00:00 2001 From: Valentin Huber Date: Sat, 1 Feb 2025 21:24:24 +0100 Subject: [PATCH] Introduce BoolMutator (#2926) --- libafl/src/mutators/mod.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libafl/src/mutators/mod.rs b/libafl/src/mutators/mod.rs index 93667b789d..5a9745f26a 100644 --- a/libafl/src/mutators/mod.rs +++ b/libafl/src/mutators/mod.rs @@ -407,3 +407,22 @@ impl Named for NopMutator { &Cow::Borrowed("NopMutator") } } + +/// [`Mutator`] that flips a boolean value. +/// +/// Mostly useful in combination with [`mapping::MappingMutator`]s. +#[derive(Debug)] +pub struct BoolMutator; + +impl Mutator for BoolMutator { + fn mutate(&mut self, _state: &mut S, input: &mut bool) -> Result { + *input = !*input; + Ok(MutationResult::Mutated) + } +} + +impl Named for BoolMutator { + fn name(&self) -> &Cow<'static, str> { + &Cow::Borrowed("BoolMutator") + } +}