From c6875b8cf6264dcde05833a7839755879aeff301 Mon Sep 17 00:00:00 2001 From: "Dongjia \"toka\" Zhang" Date: Fri, 15 Mar 2024 19:13:58 +0100 Subject: [PATCH] Fix self.iterations underflow (#1942) * fix * fix * FMT --- libafl/src/stages/mutational.rs | 6 +++++- libafl/src/stages/tuneable.rs | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libafl/src/stages/mutational.rs b/libafl/src/stages/mutational.rs index 0f6a453e42..1f39e2747d 100644 --- a/libafl/src/stages/mutational.rs +++ b/libafl/src/stages/mutational.rs @@ -109,7 +109,11 @@ where manager: &mut EM, ) -> Result<(), Error> { start_timer!(state); - let num = self.iterations(state)? - self.execs_since_progress_start(state)?; + + // Here saturating_sub is needed as self.iterations() might be actually smaller than the previous value before reset. + let num = self + .iterations(state)? + .saturating_sub(self.execs_since_progress_start(state)?); let mut testcase = state.current_testcase_mut()?; let Ok(input) = I::try_transform_from(&mut testcase, state) else { diff --git a/libafl/src/stages/tuneable.rs b/libafl/src/stages/tuneable.rs index 9c386d4aa6..ed6f897130 100644 --- a/libafl/src/stages/tuneable.rs +++ b/libafl/src/stages/tuneable.rs @@ -222,7 +222,9 @@ where } (None, None) => { // fall back to random - let iters = self.iterations(state)? - self.execs_since_progress_start(state)?; + let iters = self + .iterations(state)? + .saturating_sub(self.execs_since_progress_start(state)?); for _ in 1..=iters { self.perform_mutation(fuzzer, executor, state, manager, &input)?; }