Merge pull request #5 from AFLplusplus/vh_dcm

compiles
This commit is contained in:
van Hauser 2020-12-20 16:09:27 +01:00 committed by GitHub
commit 264cfff631
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -47,6 +47,83 @@ where
phantom: PhantomData<(I, R, OT)>,
}
impl<R, FT, OT> State<BytesInput, R, FT, OT>
where
R: Rand,
FT: FeedbacksTuple<BytesInput>,
OT: ObserversTuple,
{
pub fn load_from_directory<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, BytesInput>,
manager: &mut EM,
in_dir: &Path,
) -> Result<(), AflError>
where
G: Generator<BytesInput, R>,
C: Corpus<BytesInput, R>,
E: Executor<BytesInput> + HasObservers<OT>,
ET: ExecutorsTuple<BytesInput>,
EM: EventManager<C, E, OT, FT, BytesInput, R>,
{
for entry in fs::read_dir(in_dir)? {
let entry = entry?;
let path = entry.path();
let attributes = fs::metadata(&path);
if !attributes.is_ok() {
continue;
}
let attr = attributes?;
if attr.is_file() {
println!("Load file {:?}", &path);
let bytes = std::fs::read(path)?;
let input = BytesInput::new(bytes);
let fitness = self.evaluate_input(&input, engine.executor_mut())?;
if self.add_if_interesting(corpus, input, fitness)?.is_none() {
println!("File {:?} was interesting, skipped.", &path);
}
} else if attr.is_dir() {
self.load_from_directory(corpus, generator, engine, manager, &path)?;
}
}
Ok(())
}
pub fn load_initial_inputs<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, BytesInput>,
manager: &mut EM,
in_dir: Vec<String>,
) -> Result<(), AflError>
where
G: Generator<BytesInput, R>,
C: Corpus<BytesInput, R>,
E: Executor<BytesInput> + HasObservers<OT>,
ET: ExecutorsTuple<BytesInput>,
EM: EventManager<C, E, OT, FT, BytesInput, R>,
{
for directory in &in_dir {
self.load_from_directory(corpus, generator, engine, manager, Path::new(directory))?;
}
manager.log(
0,
format!("Loaded {} initial testcases", in_dir.len()), // get corpus count
)?;
manager.process(self, corpus)?;
Ok(())
}
}
impl<I, R, FT, OT> State<I, R, FT, OT>
where
I: Input,
@ -198,72 +275,6 @@ where
}
}
pub fn load_from_directory<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, I>,
manager: &mut EM,
in_dir: &Path,
) -> Result<(), AflError>
where
G: Generator<I, R>,
C: Corpus<I, R>,
E: Executor<I> + HasObservers<OT>,
ET: ExecutorsTuple<I>,
EM: EventManager<C, E, OT, FT, I, R>,
{
for entry in fs::read_dir(in_dir)? {
let entry = entry?;
let path = entry.path();
let attributes = fs::metadata(&path);
if !attributes.is_ok() {
continue;
}
let attr = attributes?;
if attr.is_file() {
println!("Loading file {:?}", &path);
let input = std::fs::read(path)?;
let input = BytesInput::new(input);
let input = do_whatever_magic_function(input);
let fitness = self.evaluate_input(&input, engine.executor_mut())?;
self.add_if_interesting(corpus, input, fitness)?;
} else if attr.is_dir() {
self.load_from_directory(corpus, generator, engine, manager, &path)?;
}
}
Ok(())
}
pub fn load_initial_inputs<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, I>,
manager: &mut EM,
in_dir: Vec<String>,
) -> Result<(), AflError>
where
G: Generator<I, R>,
C: Corpus<I, R>,
E: Executor<I> + HasObservers<OT>,
ET: ExecutorsTuple<I>,
EM: EventManager<C, E, OT, FT, I, R>,
{
for directory in &in_dir {
self.load_from_directory(corpus, generator, engine, manager, Path::new(directory))?;
}
manager.log(0, format!("Loaded {} initial testcases", corpus.count()))?;
manager.process(self, corpus)?;
Ok(())
}
pub fn generate_initial_inputs<G, C, E, ET, EM>(
&mut self,
rand: &mut R,