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 <sami@theorem.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
33 lines
988 B
C
33 lines
988 B
C
#define USE_THE_REPOSITORY_VARIABLE
|
|
|
|
#include "git-compat-util.h"
|
|
#include "commit-graph.h"
|
|
#include "repository.h"
|
|
|
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
|
|
|
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
|
{
|
|
struct commit_graph *g;
|
|
|
|
memset(the_repository, 0, sizeof(*the_repository));
|
|
initialize_repository(the_repository);
|
|
|
|
/*
|
|
* Initialize the_repository with commit-graph settings that would
|
|
* normally be read from the repository's gitdir. We want to avoid
|
|
* touching the disk to keep the individual fuzz-test cases as fast as
|
|
* 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;
|
|
g = parse_commit_graph(the_repository, (void *)data, size);
|
|
repo_clear(the_repository);
|
|
free_commit_graph(g);
|
|
|
|
return 0;
|
|
}
|