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