From a328ddfd5f1f719345d86f37a08f9ce1c7ba4ab5 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Tue, 2 May 2023 09:41:53 +0200 Subject: [PATCH] fix empty iterator crash, restart --- fuzzers/FRET/benchmark/Snakefile | 2 +- fuzzers/FRET/src/mutational.rs | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fuzzers/FRET/benchmark/Snakefile b/fuzzers/FRET/benchmark/Snakefile index 6da858ae63..16ca915d43 100644 --- a/fuzzers/FRET/benchmark/Snakefile +++ b/fuzzers/FRET/benchmark/Snakefile @@ -1,5 +1,5 @@ import csv -def_flags="--no-default-features --features std,snapshot_restore,singlecore" +def_flags="--no-default-features --features std,snapshot_restore,singlecore,restarting" remote="mnt/" rule build_showmap: diff --git a/fuzzers/FRET/src/mutational.rs b/fuzzers/FRET/src/mutational.rs index 374dcdb6d0..fe81a7e1bf 100644 --- a/fuzzers/FRET/src/mutational.rs +++ b/fuzzers/FRET/src/mutational.rs @@ -305,11 +305,13 @@ where let untouched : Vec<_> = marks.iter().filter( |x| x.2 == 0 ).collect(); - let tmp = interrupt_offsets[i]; - let choice = myrand.choose(untouched); - interrupt_offsets[i] = myrand.between(choice.0.start_tick, choice.0.end_tick) - .try_into().expect("tick > u32"); - do_rerun = true; + if untouched.len() > 0 { + let tmp = interrupt_offsets[i]; + let choice = myrand.choose(untouched); + interrupt_offsets[i] = myrand.between(choice.0.start_tick, choice.0.end_tick) + .try_into().expect("tick > u32"); + do_rerun = true; + } // println!("no alternatives, choose random i: {} {} -> {}",i,tmp,interrupt_offsets[i]); continue; } else {