TestcaseMetadata name()
This commit is contained in:
parent
3e6bca34f1
commit
4b16b8a172
@ -4,7 +4,9 @@ use crate::AflError;
|
|||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
pub trait TestcaseMetadata {}
|
pub trait TestcaseMetadata {
|
||||||
|
fn name(&self) -> &'static str;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pub trait TestcaseTrait<I: Input> {
|
pub trait TestcaseTrait<I: Input> {
|
||||||
@ -35,7 +37,7 @@ where
|
|||||||
{
|
{
|
||||||
input: Option<I>, // TODO remove box
|
input: Option<I>, // TODO remove box
|
||||||
filename: Option<PathBuf>,
|
filename: Option<PathBuf>,
|
||||||
metadatas: HashMap<String, Box<dyn TestcaseMetadata>>,
|
metadatas: HashMap<&'static str, Box<dyn TestcaseMetadata>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<I> Testcase<I>
|
impl<I> Testcase<I>
|
||||||
@ -78,13 +80,13 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get all the metadatas into an HashMap
|
/// Get all the metadatas into an HashMap
|
||||||
pub fn metadatas(&mut self) -> &mut HashMap<String, Box<dyn TestcaseMetadata>> {
|
pub fn metadatas(&mut self) -> &mut HashMap<&'static str, Box<dyn TestcaseMetadata>> {
|
||||||
&mut self.metadatas
|
&mut self.metadatas
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a metadata
|
/// Add a metadata
|
||||||
pub fn add_metadata(&mut self, name: String, meta: Box<dyn TestcaseMetadata>) {
|
pub fn add_metadata(&mut self, meta: Box<dyn TestcaseMetadata>) {
|
||||||
self.metadatas.insert(name, meta);
|
self.metadatas.insert(meta.name(), meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new DefaultTestcase instace given an input
|
/// Create a new DefaultTestcase instace given an input
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::corpus::testcase::Testcase;
|
use crate::corpus::testcase::{Testcase, TestcaseMetadata};
|
||||||
use crate::corpus::Corpus;
|
use crate::corpus::Corpus;
|
||||||
use crate::executors::Executor;
|
use crate::executors::Executor;
|
||||||
use crate::feedbacks::Feedback;
|
use crate::feedbacks::Feedback;
|
||||||
@ -61,36 +61,33 @@ where
|
|||||||
fn evaluate_input_engine(
|
fn evaluate_input_engine(
|
||||||
&mut self,
|
&mut self,
|
||||||
input: &mut I,
|
input: &mut I,
|
||||||
entry: Rc<RefCell<Testcase<I>>>,
|
_entry: Rc<RefCell<Testcase<I>>>,
|
||||||
) -> Result<bool, AflError> {
|
) -> Result<bool, AflError> {
|
||||||
self.executor_mut().reset_observers()?;
|
self.executor_mut().reset_observers()?;
|
||||||
self.executor_mut().run_target(input)?;
|
self.executor_mut().run_target(input)?;
|
||||||
self.executor_mut().post_exec_observers()?;
|
self.executor_mut().post_exec_observers()?;
|
||||||
|
|
||||||
// TODO new method for this shit
|
let mut metadatas: Vec<Box<dyn TestcaseMetadata>> = vec![];
|
||||||
let mut new_entry: Rc<RefCell<Testcase<I>>> =
|
|
||||||
Rc::new(RefCell::new(Testcase::<I>::default())); // lazy init
|
|
||||||
let mut rate_acc = 0;
|
let mut rate_acc = 0;
|
||||||
for feedback in self.feedbacks_mut() {
|
for feedback in self.feedbacks_mut() {
|
||||||
let (rate, meta) = feedback.is_interesting(input);
|
let (rate, meta) = feedback.is_interesting(input);
|
||||||
rate_acc += rate;
|
rate_acc += rate;
|
||||||
if let Some(m) = meta {
|
if let Some(m) = meta {
|
||||||
if let Some(_) = new_entry {
|
metadatas.push(m);
|
||||||
} else {
|
|
||||||
new_entry = Some(Rc::new(RefCell::new(Testcase::<I>::new(input.clone()))));
|
|
||||||
}
|
|
||||||
new_entry
|
|
||||||
.unwrap()
|
|
||||||
.borrow_mut()
|
|
||||||
.add_metadata("test".to_string(), m);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if rate_acc >= 25 {
|
if rate_acc >= 25 {
|
||||||
self.corpus_mut().add(new_entry.unwrap().clone());
|
let new_entry = Rc::new(RefCell::new(Testcase::<I>::new(input.clone())));
|
||||||
}
|
for meta in metadatas {
|
||||||
|
new_entry.borrow_mut().add_metadata(meta);
|
||||||
|
}
|
||||||
|
self.corpus_mut().add(new_entry);
|
||||||
|
|
||||||
Ok(true)
|
Ok(true)
|
||||||
|
} else {
|
||||||
|
Ok(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user