diff --git a/fuzzing/fuzz-targets/fuzz_config.py b/fuzzing/fuzz-targets/fuzz_config.py index 0a06956c8..7623ab98f 100644 --- a/fuzzing/fuzz-targets/fuzz_config.py +++ b/fuzzing/fuzz-targets/fuzz_config.py @@ -20,16 +20,21 @@ import atheris import sys import io +import os from configparser import MissingSectionHeaderError, ParsingError with atheris.instrument_imports(): - from git import GitConfigParser + import git def TestOneInput(data): + if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): + path_to_bundled_git_binary = os.path.abspath(os.path.join(os.path.dirname(__file__), "git")) + git.refresh(path_to_bundled_git_binary) + sio = io.BytesIO(data) sio.name = "/tmp/fuzzconfig.config" - git_config = GitConfigParser(sio) + git_config = git.GitConfigParser(sio) try: git_config.read() except (MissingSectionHeaderError, ParsingError, UnicodeDecodeError): diff --git a/fuzzing/fuzz-targets/fuzz_tree.py b/fuzzing/fuzz-targets/fuzz_tree.py index 464235098..7187c4a6f 100644 --- a/fuzzing/fuzz-targets/fuzz_tree.py +++ b/fuzzing/fuzz-targets/fuzz_tree.py @@ -24,11 +24,14 @@ import shutil with atheris.instrument_imports(): - from git.objects import Tree - from git.repo import Repo + import git def TestOneInput(data): + if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): + path_to_bundled_git_binary = os.path.abspath(os.path.join(os.path.dirname(__file__), "git")) + git.refresh(path_to_bundled_git_binary) + fdp = atheris.FuzzedDataProvider(data) git_dir = "/tmp/.git" head_file = os.path.join(git_dir, "HEAD") @@ -46,9 +49,9 @@ def TestOneInput(data): os.mkdir(common_dir) os.mkdir(objects_dir) - _repo = Repo("/tmp/") + _repo = git.Repo("/tmp/") - fuzz_tree = Tree(_repo, Tree.NULL_BIN_SHA, 0, "") + fuzz_tree = git.Tree(_repo, git.Tree.NULL_BIN_SHA, 0, "") try: fuzz_tree._deserialize(io.BytesIO(data)) except IndexError: diff --git a/fuzzing/oss-fuzz-scripts/build.sh b/fuzzing/oss-fuzz-scripts/build.sh index ab46ec7a2..be31ac32a 100644 --- a/fuzzing/oss-fuzz-scripts/build.sh +++ b/fuzzing/oss-fuzz-scripts/build.sh @@ -14,7 +14,7 @@ find "$SEED_DATA_DIR" \( -name '*_seed_corpus.zip' -o -name '*.options' -o -name # Build fuzzers in $OUT. find "$SRC/gitpython/fuzzing" -name 'fuzz_*.py' -print0 | while IFS= read -r -d '' fuzz_harness; do - compile_python_fuzzer "$fuzz_harness" + compile_python_fuzzer "$fuzz_harness" --add-binary="$(command -v git):." common_base_dictionary_filename="$SEED_DATA_DIR/__base.dict" if [[ -r "$common_base_dictionary_filename" ]]; then