aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2020-02-16 09:47:50 -0800
committerMarcoFalke <falke.marco@gmail.com>2020-02-16 09:47:54 -0800
commit94c0287aec9a250f58c4c633dabaf405d82cecd2 (patch)
tree93aecb2f8344d7850dabd70a610636fbfaabb37e
parent33861a836727cc0514f9ec8de0e692b89f98c410 (diff)
parent1b068c50dd1522990cc33e1aca444741c7e5a747 (diff)
downloadbitcoin-94c0287aec9a250f58c4c633dabaf405d82cecd2.tar.xz
Merge #18159: tests: Add --valgrind option to test/fuzz/test_runner.py for running fuzzing test cases under valgrind
1b068c50dd1522990cc33e1aca444741c7e5a747 tests: Add --valgrind option to test/fuzz/test_runner.py for running fuzzing test cases under valgrind (practicalswift) Pull request description: Add `--valgrind` option to `test/fuzz/test_runner.py` for running fuzzing test cases under `valgrind`. Test this PR using: ``` $ make distclean $ ./autogen.sh $ CC=clang CXX=clang++ ./configure --enable-fuzz --with-sanitizers=fuzzer $ make $ git clone https://github.com/bitcoin-core/qa-assets $ test/fuzz/test_runner.py --valgrind -l DEBUG qa-assets/fuzz_seed_corpus/ ``` ACKs for top commit: MarcoFalke: ACK 1b068c50dd1522990cc33e1aca444741c7e5a747 🌒 Tree-SHA512: e6eb99af1bceaa6f36f49092a05de415848099ccc1497cc098a62e925954c978cb37a46410b44ed5eef2c6464ca4ecb06397b75b5d35701f5a8525436e47b9fd
-rwxr-xr-xtest/fuzz/test_runner.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/test/fuzz/test_runner.py b/test/fuzz/test_runner.py
index 50e86cf9dc..61c3e700c5 100755
--- a/test/fuzz/test_runner.py
+++ b/test/fuzz/test_runner.py
@@ -62,6 +62,11 @@ def main():
help='If true, export coverage information to files in the seed corpus',
)
parser.add_argument(
+ '--valgrind',
+ action='store_true',
+ help='If true, run fuzzing binaries under the valgrind memory error detector. Valgrind 3.14 or later required.',
+ )
+ parser.add_argument(
'seed_dir',
help='The seed corpus to run on (must contain subfolders for each fuzz target).',
)
@@ -129,10 +134,11 @@ def main():
test_list=test_list_selection,
build_dir=config["environment"]["BUILDDIR"],
export_coverage=args.export_coverage,
+ use_valgrind=args.valgrind,
)
-def run_once(*, corpus, test_list, build_dir, export_coverage):
+def run_once(*, corpus, test_list, build_dir, export_coverage, use_valgrind):
for t in test_list:
corpus_path = os.path.join(corpus, t)
if t in FUZZERS_MISSING_CORPORA:
@@ -143,6 +149,8 @@ def run_once(*, corpus, test_list, build_dir, export_coverage):
'-detect_leaks=0',
corpus_path,
]
+ if use_valgrind:
+ args = ['valgrind', '--quiet', '--error-exitcode=1', '--exit-on-first-error=yes'] + args
logging.debug('Run {} with args {}'.format(t, args))
result = subprocess.run(args, stderr=subprocess.PIPE, universal_newlines=True)
output = result.stderr