number of executions

This commit is contained in:
Andrea Fioraldi 2020-11-21 11:45:39 +01:00
parent c4180f0f47
commit 79d70fb59d

View File

@ -4,6 +4,7 @@ use alloc::boxed::Box;
use alloc::rc::Rc; use alloc::rc::Rc;
use alloc::vec::Vec; use alloc::vec::Vec;
use core::cell::RefCell; use core::cell::RefCell;
use core::fmt::Debug;
use crate::corpus::{Corpus, Testcase}; use crate::corpus::{Corpus, Testcase};
use crate::executors::Executor; use crate::executors::Executor;
@ -13,12 +14,20 @@ use crate::observers::Observer;
use crate::stages::Stage; use crate::stages::Stage;
use crate::AflError; use crate::AflError;
pub trait StateMetadata: Debug {}
pub trait State<C, E, I> pub trait State<C, E, I>
where where
C: Corpus<I>, C: Corpus<I>,
E: Executor<I>, E: Executor<I>,
I: Input, I: Input,
{ {
/// Get executions
fn executions(&self) -> usize;
/// Set executions
fn set_executions(&mut self, executions: usize);
/// Get the linked observers /// Get the linked observers
fn observers(&self) -> &[Rc<RefCell<dyn Observer>>]; fn observers(&self) -> &[Rc<RefCell<dyn Observer>>];
@ -73,6 +82,7 @@ where
fn evaluate_input(&mut self, input: &I) -> Result<bool, AflError> { fn evaluate_input(&mut self, input: &I) -> Result<bool, AflError> {
self.reset_observers()?; self.reset_observers()?;
self.executor_mut().run_target(input)?; self.executor_mut().run_target(input)?;
self.set_executions(self.executions() + 1);
self.post_exec_observers()?; self.post_exec_observers()?;
let mut rate_acc = 0; let mut rate_acc = 0;
@ -101,6 +111,7 @@ where
E: Executor<I>, E: Executor<I>,
I: Input, I: Input,
{ {
executions: usize,
observers: Vec<Rc<RefCell<dyn Observer>>>, observers: Vec<Rc<RefCell<dyn Observer>>>,
feedbacks: Vec<Box<dyn Feedback<I>>>, feedbacks: Vec<Box<dyn Feedback<I>>>,
corpus: C, corpus: C,
@ -113,6 +124,14 @@ where
E: Executor<I>, E: Executor<I>,
I: Input, I: Input,
{ {
fn executions(&self) -> usize {
self.executions
}
fn set_executions(&mut self, executions: usize) {
self.executions = executions
}
fn observers(&self) -> &[Rc<RefCell<dyn Observer>>] { fn observers(&self) -> &[Rc<RefCell<dyn Observer>>] {
&self.observers &self.observers
} }
@ -154,6 +173,7 @@ where
{ {
pub fn new(corpus: C, executor: E) -> Self { pub fn new(corpus: C, executor: E) -> Self {
DefaultState { DefaultState {
executions: 0,
observers: vec![], observers: vec![],
feedbacks: vec![], feedbacks: vec![],
corpus: corpus, corpus: corpus,