|
|
@ -47,6 +47,7 @@ FUZZERS_MISSING_CORPORA = [
|
|
|
|
"tx_out",
|
|
|
|
"tx_out",
|
|
|
|
]
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
parser.add_argument(
|
|
|
|
parser.add_argument(
|
|
|
@ -66,6 +67,11 @@ def main():
|
|
|
|
action='store_true',
|
|
|
|
action='store_true',
|
|
|
|
help='If true, run fuzzing binaries under the valgrind memory error detector',
|
|
|
|
help='If true, run fuzzing binaries under the valgrind memory error detector',
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument(
|
|
|
|
|
|
|
|
'-x',
|
|
|
|
|
|
|
|
'--exclude',
|
|
|
|
|
|
|
|
help="A comma-separated list of targets to exclude",
|
|
|
|
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
parser.add_argument(
|
|
|
|
'seed_dir',
|
|
|
|
'seed_dir',
|
|
|
|
help='The seed corpus to run on (must contain subfolders for each fuzz target).',
|
|
|
|
help='The seed corpus to run on (must contain subfolders for each fuzz target).',
|
|
|
@ -100,7 +106,7 @@ def main():
|
|
|
|
logging.error("No fuzz targets found")
|
|
|
|
logging.error("No fuzz targets found")
|
|
|
|
sys.exit(1)
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
|
|
logging.info("Fuzz targets found: {}".format(test_list_all))
|
|
|
|
logging.debug("{} fuzz target(s) found: {}".format(len(test_list_all), " ".join(sorted(test_list_all))))
|
|
|
|
|
|
|
|
|
|
|
|
args.target = args.target or test_list_all # By default run all
|
|
|
|
args.target = args.target or test_list_all # By default run all
|
|
|
|
test_list_error = list(set(args.target).difference(set(test_list_all)))
|
|
|
|
test_list_error = list(set(args.target).difference(set(test_list_all)))
|
|
|
@ -109,7 +115,15 @@ def main():
|
|
|
|
test_list_selection = list(set(test_list_all).intersection(set(args.target)))
|
|
|
|
test_list_selection = list(set(test_list_all).intersection(set(args.target)))
|
|
|
|
if not test_list_selection:
|
|
|
|
if not test_list_selection:
|
|
|
|
logging.error("No fuzz targets selected")
|
|
|
|
logging.error("No fuzz targets selected")
|
|
|
|
logging.info("Fuzz targets selected: {}".format(test_list_selection))
|
|
|
|
if args.exclude:
|
|
|
|
|
|
|
|
for excluded_target in args.exclude.split(","):
|
|
|
|
|
|
|
|
if excluded_target not in test_list_selection:
|
|
|
|
|
|
|
|
logging.error("Target \"{}\" not found in current target list.".format(excluded_target))
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
test_list_selection.remove(excluded_target)
|
|
|
|
|
|
|
|
test_list_selection.sort()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logging.info("{} of {} detected fuzz target(s) selected: {}".format(len(test_list_selection), len(test_list_all), " ".join(test_list_selection)))
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
help_output = subprocess.run(
|
|
|
|
help_output = subprocess.run(
|
|
|
|