diff --git a/fuzz/fuzz_cargo_lock.py b/fuzz/fuzz_cargo_lock.py index e4a1363aba..1b4794d0fe 100644 --- a/fuzz/fuzz_cargo_lock.py +++ b/fuzz/fuzz_cargo_lock.py @@ -5,9 +5,10 @@ This module contains fuzz testing for the RustParser's handling of Cargo.lock files. """ +import os +import shutil import sys import tempfile -from pathlib import Path import atheris import atheris_libprotobuf_mutator @@ -24,7 +25,7 @@ logger = LOGGER.getChild("Fuzz") -def CargoLockBuilder(data): +def CargoLockBuilder(data, file_path): """ This function converts the given data into a Cargo.lock file. @@ -65,15 +66,16 @@ def CargoLockBuilder(data): f.write("\n") -def TestParseData(data): +def TestParseData(data, cve_db, logger, tmpdir): """ Fuzz test the RustParser's handling of Cargo.lock files. Args: data (protobuf message): The protobuf message to convert to a Cargo.lock file. """ + file_path = os.path.join(tmpdir, "Cargo.lock") try: - CargoLockBuilder(data) + CargoLockBuilder(data, file_path) rust_parser = RustParser(cve_db, logger) rust_parser.run_checker(file_path) @@ -82,9 +84,19 @@ def TestParseData(data): return -file_path = str(Path(tempfile.mkdtemp(prefix="cve-bin-tool-")) / "Cargo.lock") - -atheris_libprotobuf_mutator.Setup( - sys.argv, TestParseData, proto=cargo_lock_pb2.CargoLock -) -atheris.Fuzz() +def main(): + tmpdir = tempfile.mkdtemp(prefix="cve-bin-tool-") + try: + atheris_libprotobuf_mutator.Setup( + sys.argv, + lambda data: TestParseData(data, cve_db, logger, tmpdir), + proto=cargo_lock_pb2.CargoLock, + ) + atheris.Fuzz() + finally: + if os.path.exists(tmpdir): + shutil.rmtree(tmpdir) + + +if __name__ == "__main__": + main()