def _get_cross_pollinate_fuzzers(engine_name, current_fuzzer_name, method, tag): """Return a list of fuzzer objects to use for cross pollination.""" cross_pollinate_fuzzers = [] selected_targets_and_jobs = _select_targets_and_jobs_for_pollination( engine_name, current_fuzzer_name, method, tag) default_backup_bucket = utils.default_backup_bucket() for target, target_job in selected_targets_and_jobs: job = data_types.Job.query(data_types.Job.name == target_job.job).get() if not job: continue job_environment = job.get_environment() backup_bucket_name = job_environment.get('BACKUP_BUCKET', default_backup_bucket) if not backup_bucket_name: continue corpus_engine_name = job_environment.get('CORPUS_FUZZER_NAME_OVERRIDE', engine_name) cross_pollinate_fuzzers.append( CrossPollinateFuzzer( target, backup_bucket_name, corpus_engine_name, )) return cross_pollinate_fuzzers
def _get_cross_pollinate_fuzzers(engine_name, current_fuzzer_name): """Return a list of fuzzer objects to use for cross pollination.""" cross_pollinate_fuzzers = [] target_jobs = list( fuzz_target_utils.get_fuzz_target_jobs(engine=engine_name)) targets = fuzz_target_utils.get_fuzz_targets_for_target_jobs(target_jobs) targets_and_jobs = [(target, target_job) for target, target_job in zip(targets, target_jobs) if target_job.fuzz_target_name != current_fuzzer_name] selected_targets_and_jobs = random.SystemRandom().sample( targets_and_jobs, min(len(targets_and_jobs), CROSS_POLLINATE_FUZZER_COUNT)) default_backup_bucket = utils.default_backup_bucket() for target, target_job in selected_targets_and_jobs: job = data_types.Job.query(data_types.Job.name == target_job.job).get() if not job: continue job_environment = job.get_environment() backup_bucket_name = job_environment.get("BACKUP_BUCKET", default_backup_bucket) if not backup_bucket_name: continue corpus_engine_name = job_environment.get("CORPUS_FUZZER_NAME_OVERRIDE", engine_name) cross_pollinate_fuzzers.append( CrossPollinateFuzzer(target, backup_bucket_name, corpus_engine_name)) return cross_pollinate_fuzzers
def get(self): """Handle a GET request.""" jobs = ndb_utils.get_all_from_model(data_types.Job) default_backup_bucket = utils.default_backup_bucket() for job in jobs: job_environment = job.get_environment() if utils.string_is_true(job_environment.get("EXPERIMENTAL")): # Don't use corpus backups from experimental jobs. Skip. continue if not utils.string_is_true(job_environment.get("CORPUS_PRUNE")): # There won't be any corpus backups for these jobs. Skip. continue corpus_backup_bucket_name = job_environment.get( "BACKUP_BUCKET", default_backup_bucket) if not corpus_backup_bucket_name: # No backup bucket found. Skip. continue corpus_fuzzer_name_override = job_environment.get( "CORPUS_FUZZER_NAME_OVERRIDE") target_jobs = list( fuzz_target_utils.get_fuzz_target_jobs(job=job.name)) fuzz_targets = fuzz_target_utils.get_fuzz_targets_for_target_jobs( target_jobs) for target in fuzz_targets: if not target: # This is expected if any fuzzer/job combinations become outdated. continue _make_corpus_backup_public(target, corpus_fuzzer_name_override, corpus_backup_bucket_name)