From 99ecb6ca8b32aeee47fcb2e76c2b7658f58a30f2 Mon Sep 17 00:00:00 2001 From: Sami Jawhar Date: Sat, 24 Oct 2026 11:50:42 -0700 Subject: [PATCH] oss-fuzz: set a gitdir in the commit-graph fuzzer Since f1141b4391 (commit-graph: refactor `parse_commit_graph()` to take a repository, 2025-08-15), parse_commit_graph() calls prepare_repo_settings(). The fuzzer sets settings.initialized, so that git reads no configuration. But prepare_repo_settings() checks for a gitdir before it reads that flag, and the repository of the fuzzer has no gitdir. Thus each input that passes the header and the three required chunks stops at BUG: repo-settings.c:40: Cannot add settings for uninitialized repository The fuzzer never reaches the code that reads the optional chunks: generation data and changed-path Bloom filters. Set a placeholder gitdir, as test-path-utils does. prepare_repo_settings() checks only that the gitdir is not NULL. It then returns, because the fuzzer marks the settings as initialized. repo_clear() frees the gitdir, and no code opens a file under it. Signed-off-by: Sami Jawhar Signed-off-by: Junio C Hamano --- oss-fuzz/fuzz-commit-graph.c | 1 + 1 file changed, 1 insertion(+) diff --git a/oss-fuzz/fuzz-commit-graph.c b/oss-fuzz/fuzz-commit-graph.c index 59bbb849d1..9a226eb269 100644 --- a/oss-fuzz/fuzz-commit-graph.c +++ b/oss-fuzz/fuzz-commit-graph.c @@ -20,6 +20,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) * possible. */ repo_set_hash_algo(the_repository, GIT_HASH_SHA1); + the_repository->gitdir = xstrdup(".git"); the_repository->settings.initialized = 1; the_repository->settings.commit_graph_generation_version = 2; the_repository->settings.commit_graph_changed_paths_version = 1;