diff --git a/fuzzers/fuzz_anything/baby_fuzzer_wasm/src/lib.rs b/fuzzers/fuzz_anything/baby_fuzzer_wasm/src/lib.rs index 93d91961e0..904f93f456 100644 --- a/fuzzers/fuzz_anything/baby_fuzzer_wasm/src/lib.rs +++ b/fuzzers/fuzz_anything/baby_fuzzer_wasm/src/lib.rs @@ -52,6 +52,7 @@ pub fn fuzz() { unsafe { RegistryBuilder::register::>(); RegistryBuilder::register::(); + RegistryBuilder::register::(); } let mut signals = [0u8; 64]; diff --git a/libafl/src/executors/inprocess/mod.rs b/libafl/src/executors/inprocess/mod.rs index 857c2dea28..e07b183cd2 100644 --- a/libafl/src/executors/inprocess/mod.rs +++ b/libafl/src/executors/inprocess/mod.rs @@ -15,7 +15,7 @@ use core::{ use libafl_bolts::tuples::{RefIndexable, tuple_list}; use crate::{ - Error, + Error, HasMetadata, corpus::{Corpus, Testcase}, events::{Event, EventFirer, EventRestarter}, executors::{ @@ -345,6 +345,7 @@ pub fn run_observers_and_save_state( if is_solution { let mut new_testcase = Testcase::from(input.clone()); + new_testcase.add_metadata(exitkind); new_testcase.set_parent_id_optional(*state.corpus().current()); if let Ok(mut tc) = state.current_testcase_mut() { diff --git a/libafl/src/fuzzer/mod.rs b/libafl/src/fuzzer/mod.rs index 1951890f4d..098a20a63f 100644 --- a/libafl/src/fuzzer/mod.rs +++ b/libafl/src/fuzzer/mod.rs @@ -94,6 +94,7 @@ pub trait ExecutionProcessor { manager: &mut EM, input: &I, exec_res: &ExecuteInputResult, + exit_kind: &ExitKind, observers: &OT, ) -> Result, Error>; @@ -409,6 +410,7 @@ where manager: &mut EM, input: &I, exec_res: &ExecuteInputResult, + exit_kind: &ExitKind, observers: &OT, ) -> Result, Error> { let corpus = if exec_res.is_corpus() { @@ -429,6 +431,7 @@ where if exec_res.is_solution() { // The input is a solution, add it to the respective corpus let mut testcase = Testcase::from(input.clone()); + testcase.add_metadata(*exit_kind); testcase.set_parent_id_optional(*state.corpus().current()); if let Ok(mut tc) = state.current_testcase_mut() { tc.found_objective(); @@ -519,7 +522,8 @@ where send_events: bool, ) -> Result<(ExecuteInputResult, Option), Error> { let exec_res = self.check_results(state, manager, input, observers, exit_kind)?; - let corpus_id = self.process_execution(state, manager, input, &exec_res, observers)?; + let corpus_id = + self.process_execution(state, manager, input, &exec_res, exit_kind, observers)?; if send_events { self.serialize_and_dispatch(state, manager, input, &exec_res, observers, exit_kind)?; }