def divide_by_signal(self, confirmation_loops=0, function=shutil.copyfile): if self.output_dir is not None and not os.path.exists(self.output_dir): os.mkdir(self.output_dir) ex = Executer(self.config) for path, _, files in os.walk(self.search_dir): for filename in files: if filename.endswith(self.config.run_extension): continue filepath = os.path.join( path, filename ) command = self.config.get_command_line(self.binary_to_use, filepath) Logger.debug("Executing:", command, debug_level=4) Logger.busy() signal = ex.get_signal_for_run(command, env=self.config.env) while confirmation_loops > 0: Logger.busy() new_signal = ex.get_signal_for_run(command, env=self.config.env) if new_signal == signal: signal = new_signal confirmation_loops -= 1 else: Logger.info("Detected varying return codes for exactly the same run") signal = SignalFinder.VARYING_SIGNAL break Logger.debug("We consider signal %i for input file %s" % (signal, filename), debug_level=5) destination_dir = self.get_folder_path_for_signal(signal) if not os.path.exists(destination_dir): os.mkdir(destination_dir) function(filepath, os.path.join(destination_dir, filename))
def minimize_testcases(self): executer = Executer(self.config) for path, _, files in os.walk(self.search_dir): for filename in files: if filename.endswith(self.config.run_extension): continue Logger.info("Minimizing", filename) filepath = os.path.join(path, filename) cmd = self.config.get_afl_tmin_command_line(filepath, os.path.join(self.output_dir, filename)) Logger.debug("Executing:", cmd) signal = executer.get_signal_for_run(cmd, self.config.run_timeout_tmin, env=self.config.env) if signal == SignalFinder.TIMEOUT_SIGNAL: Logger.error("Minimizing this file took too long, aborted")
def divide_by_signal(self, confirmation_loops, function=shutil.copyfile): ex = Executer(self.config) for path, _, files in os.walk(self.search_dir): for filename in files: if filename.endswith(self.config.run_extension): continue filepath = os.path.join( path, filename ) command = self.config.get_command_line(self.binary_to_use, filepath) Logger.debug("Executing:", command, debug_level=4) signal = ex.get_signal_for_run(command, env=self.config.env) while confirmation_loops > 0: new_signal = ex.get_signal_for_run(command, env=self.config.env) if new_signal == signal: signal = new_signal confirmation_loops -= 1 else: Logger.info("Detected varying return codes for exactly the same run") signal = SignalFinder.VARYING_SIGNAL break Logger.debug("We consider signal %i for input file %s" % (signal, filename)) destination_dir = self.get_folder_path_for_signal(signal) if not os.path.exists(destination_dir): os.mkdir(destination_dir) function(filepath, os.path.join(destination_dir, filename))
def minimize_testcases(self): executer = Executer(self.config) for path, _, files in os.walk(self.search_dir): for filename in files: if filename.endswith(self.config.run_extension): continue Logger.info("Minimizing", filename) filepath = os.path.join(path, filename) cmd = self.config.get_afl_tmin_command_line( filepath, os.path.join(self.output_dir, filename)) Logger.debug("Executing:", cmd) signal = executer.get_signal_for_run( cmd, self.config.run_timeout_tmin, env=self.config.env) if signal == SignalFinder.TIMEOUT_SIGNAL: Logger.error("Minimizing this file took too long, aborted")