From f12502910772ccc981a2733af9394e79593c962a Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Fri, 20 Nov 2020 12:56:01 +0100 Subject: [PATCH] executor just executes --- src/executors/inmemory.rs | 64 --------------------------------------- src/executors/mod.rs | 55 --------------------------------- 2 files changed, 119 deletions(-) diff --git a/src/executors/inmemory.rs b/src/executors/inmemory.rs index 00622e09a8..8e7dd9904f 100644 --- a/src/executors/inmemory.rs +++ b/src/executors/inmemory.rs @@ -1,14 +1,10 @@ -use alloc::boxed::Box; use alloc::rc::Rc; -use alloc::vec::Vec; use core::cell::RefCell; use core::ffi::c_void; use core::ptr; use crate::executors::{Executor, ExitKind}; -use crate::feedbacks::Feedback; use crate::inputs::Input; -use crate::observers::Observer; use crate::AflError; type HarnessFunction = fn(&dyn Executor, &[u8]) -> ExitKind; @@ -17,9 +13,7 @@ pub struct InMemoryExecutor where I: Input, { - observers: Vec>, harness: HarnessFunction, - feedbacks: Vec>>, } impl Into>> for InMemoryExecutor @@ -48,40 +42,6 @@ where } Ok(ret) } - - fn reset_observers(&mut self) -> Result<(), AflError> { - for observer in &mut self.observers { - observer.reset()?; - } - Ok(()) - } - - fn post_exec_observers(&mut self) -> Result<(), AflError> { - self.observers - .iter_mut() - .map(|x| x.post_exec()) - .fold(Ok(()), |acc, x| if x.is_err() { x } else { acc }) - } - - fn add_observer(&mut self, observer: Box) { - self.observers.push(observer); - } - - fn observers(&self) -> &[Box] { - &self.observers - } - - fn feedbacks(&self) -> &[Box>] { - &self.feedbacks - } - - fn feedbacks_mut(&mut self) -> &mut Vec>> { - &mut self.feedbacks - } - - fn add_feedback(&mut self, feedback: Box>) { - self.feedbacks_mut().push(feedback); - } } impl InMemoryExecutor @@ -94,8 +54,6 @@ where os_signals::setup_crash_handlers::(); } InMemoryExecutor { - observers: vec![], - feedbacks: vec![], harness: harness_fn, } } @@ -199,12 +157,9 @@ compile_error!("InMemoryExecutor not yet supported on this OS"); #[cfg(test)] mod tests { - use alloc::boxed::Box; - use crate::executors::inmemory::InMemoryExecutor; use crate::executors::{Executor, ExitKind}; use crate::inputs::Input; - use crate::observers::Observer; use crate::AflError; #[derive(Clone)] @@ -218,17 +173,6 @@ mod tests { } } - struct Nopserver {} - - impl Observer for Nopserver { - fn reset(&mut self) -> Result<(), AflError> { - Err(AflError::Unknown("Nop reset, testing only".into())) - } - fn post_exec(&mut self) -> Result<(), AflError> { - Err(AflError::Unknown("Nop exec, testing only".into())) - } - } - #[cfg(feature = "std")] fn test_harness_fn_nop(_executor: &dyn Executor, buf: &[u8]) -> ExitKind { println!("Fake exec with buf of len {}", buf.len()); @@ -240,14 +184,6 @@ mod tests { ExitKind::Ok } - #[test] - fn test_inmem_post_exec() { - let mut in_mem_executor = InMemoryExecutor::new(test_harness_fn_nop); - let nopserver = Nopserver {}; - in_mem_executor.add_observer(Box::new(nopserver)); - assert_eq!(in_mem_executor.post_exec_observers().is_err(), true); - } - #[test] fn test_inmem_exec() { let mut in_mem_executor = InMemoryExecutor::new(test_harness_fn_nop); diff --git a/src/executors/mod.rs b/src/executors/mod.rs index 26dff889c3..40bcafe64f 100644 --- a/src/executors/mod.rs +++ b/src/executors/mod.rs @@ -1,15 +1,7 @@ pub mod inmemory; -use alloc::boxed::Box; -use alloc::vec::Vec; - -use crate::corpus::Testcase; -use crate::feedbacks::Feedback; use crate::inputs::Input; -use crate::observers::Observer; use crate::AflError; -use alloc::rc::Rc; -use core::cell::RefCell; pub enum ExitKind { Ok, @@ -26,51 +18,4 @@ where { /// Instruct the target about the input and run fn run_target(&mut self, input: &I) -> Result; - - /// Reset the state of all the observes linked to this executor - fn reset_observers(&mut self) -> Result<(), AflError>; - - /// Run the post exec hook for all the observes linked to this executor - fn post_exec_observers(&mut self) -> Result<(), AflError>; - - /// Add a linked observer - fn add_observer(&mut self, observer: Box); - - /// Get the linked observers - fn observers(&self) -> &[Box]; - - /// Adds a feedback - fn add_feedback(&mut self, feedback: Box>); - - /// Returns vector of feebacks - fn feedbacks(&self) -> &[Box>]; - - /// Returns vector of feebacks (mutable) - fn feedbacks_mut(&mut self) -> &mut Vec>>; - - /// Runs the input and triggers observers and feedback - // TODO: Move to another struct, like evaluator? - fn evaluate_input(&mut self, input: &I) -> Result { - self.reset_observers()?; - self.run_target(input)?; - self.post_exec_observers()?; - - let mut rate_acc = 0; - for feedback in self.feedbacks_mut() { - rate_acc += feedback.is_interesting(input)?; - } - - if rate_acc >= 25 { - let testcase = Rc::new(RefCell::new(Testcase::new(input.clone()))); - for feedback in self.feedbacks_mut() { - feedback.append_metadata(testcase.clone())?; - } - Ok(true) - } else { - for feedback in self.feedbacks_mut() { - feedback.discard_metadata()?; - } - Ok(false) - } - } }