diff --git a/afl/src/engines/mod.rs b/afl/src/engines/mod.rs index d611f6179b..138b87700f 100644 --- a/afl/src/engines/mod.rs +++ b/afl/src/engines/mod.rs @@ -47,6 +47,83 @@ where phantom: PhantomData<(I, R, OT)>, } +impl State +where + R: Rand, + FT: FeedbacksTuple, + OT: ObserversTuple, +{ + pub fn load_from_directory( + &mut self, + corpus: &mut C, + generator: &mut G, + engine: &mut Engine, + manager: &mut EM, + in_dir: &Path, + ) -> Result<(), AflError> + where + G: Generator, + C: Corpus, + E: Executor + HasObservers, + ET: ExecutorsTuple, + EM: EventManager, + { + 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( + &mut self, + corpus: &mut C, + generator: &mut G, + engine: &mut Engine, + manager: &mut EM, + in_dir: Vec, + ) -> Result<(), AflError> + where + G: Generator, + C: Corpus, + E: Executor + HasObservers, + ET: ExecutorsTuple, + EM: EventManager, + { + 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 State where I: Input, @@ -198,74 +275,6 @@ where } } - pub fn load_from_directory( - &mut self, - corpus: &mut C, - generator: &mut G, - engine: &mut Engine, - manager: &mut EM, - in_dir: &Path, - ) -> Result<(), AflError> - where - G: Generator, - C: Corpus, - E: Executor + HasObservers, - ET: ExecutorsTuple, - EM: EventManager, - { - 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 input = std::fs::read(path)?; - let input = BytesInput::new(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( - &mut self, - corpus: &mut C, - generator: &mut G, - engine: &mut Engine, - manager: &mut EM, - in_dir: Vec, - ) -> Result<(), AflError> - where - G: Generator, - C: Corpus, - E: Executor + HasObservers, - ET: ExecutorsTuple, - EM: EventManager, - { - for directory in &in_dir { - self.load_from_directory(corpus, generator, engine, manager, Path::new(directory))?; - } - manager.log( - 0, - format!("Loaded {} initial testcases", 123), // get corpus count - )?; - manager.process(self, corpus)?; - Ok(()) - } - pub fn generate_initial_inputs( &mut self, rand: &mut R,