diff options
Diffstat (limited to 'fuzzers/config_file_fuzzer.c')
-rw-r--r-- | fuzzers/config_file_fuzzer.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/fuzzers/config_file_fuzzer.c b/fuzzers/config_file_fuzzer.c new file mode 100644 index 0000000..890adbf --- /dev/null +++ b/fuzzers/config_file_fuzzer.c @@ -0,0 +1,61 @@ +/* + * libgit2 config file parser fuzz target. + * + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ + +#include "git2.h" +#include "config_backend.h" + +#include "standalone_driver.h" + +#define UNUSED(x) (void)(x) + +static int foreach_cb(const git_config_entry *entry, void *payload) +{ + UNUSED(entry); + UNUSED(payload); + + return 0; +} + +int LLVMFuzzerInitialize(int *argc, char ***argv) +{ + UNUSED(argc); + UNUSED(argv); + + if (git_libgit2_init() < 0) + abort(); + + return 0; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + git_config *cfg = NULL; + git_config_backend *backend = NULL; + int err = 0; + + if ((err = git_config_new(&cfg)) != 0) { + goto out; + } + + if ((err = git_config_backend_from_string(&backend, (const char*)data, size)) != 0) { + goto out; + } + if ((err = git_config_add_backend(cfg, backend, 0, NULL, 0)) != 0) { + goto out; + } + /* Now owned by the config */ + backend = NULL; + + git_config_foreach(cfg, foreach_cb, NULL); + out: + git_config_backend_free(backend); + git_config_free(cfg); + + return 0; +} |