Skip to content

Commit

Permalink
fuzz: Add option to merge input dir to test runner
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoFalke committed Mar 9, 2020
1 parent fa4fa88 commit aaaa055
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion test/fuzz/test_runner.py
Expand Up @@ -18,7 +18,10 @@


def main():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description='''Run the fuzz targets with all inputs from the seed_dir once.''',
)
parser.add_argument(
"-l",
"--loglevel",
Expand Down Expand Up @@ -50,6 +53,10 @@ def main():
nargs='*',
help='The target(s) to run. Default is to run all targets.',
)
parser.add_argument(
'--m_dir',
help='Merge inputs from this directory into the seed_dir. Needs /target subdirectory.',
)

args = parser.parse_args()

Expand Down Expand Up @@ -112,6 +119,14 @@ def main():
logging.error("subprocess timed out: Currently only libFuzzer is supported")
sys.exit(1)

if args.m_dir:
merge_inputs(
corpus=args.seed_dir,
test_list=test_list_selection,
build_dir=config["environment"]["BUILDDIR"],
merge_dir=args.m_dir,
)

run_once(
corpus=args.seed_dir,
test_list=test_list_selection,
Expand All @@ -121,6 +136,22 @@ def main():
)


def merge_inputs(*, corpus, test_list, build_dir, merge_dir):
logging.info("Merge the inputs in the passed dir into the seed_dir. Passed dir {}".format(merge_dir))
for t in test_list:
args = [
os.path.join(build_dir, 'src', 'test', 'fuzz', t),
'-merge=1',
os.path.join(corpus, t),
os.path.join(merge_dir, t),
]
os.makedirs(os.path.join(corpus, t), exist_ok=True)
os.makedirs(os.path.join(merge_dir, t), exist_ok=True)
logging.debug('Run {} with args {}'.format(t, args))
output = subprocess.run(args, check=True, stderr=subprocess.PIPE, universal_newlines=True).stderr
logging.debug('Output: {}'.format(output))


def run_once(*, corpus, test_list, build_dir, export_coverage, use_valgrind):
for t in test_list:
corpus_path = os.path.join(corpus, t)
Expand Down

0 comments on commit aaaa055

Please sign in to comment.