summaryrefslogtreecommitdiffstats
path: root/fuzzers/config_file_fuzzer.c
diff options
context:
space:
mode:
Diffstat (limited to 'fuzzers/config_file_fuzzer.c')
-rw-r--r--fuzzers/config_file_fuzzer.c61
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;
+}