summaryrefslogtreecommitdiffstats
path: root/fuzzers/revparse_fuzzer.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 05:03:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 05:03:04 +0000
commitb88736462df2c86a83f01dcc260b5463205819d2 (patch)
treeb1a9a5a5392a52ec4e5f60fb4b45083cf7fd65b0 /fuzzers/revparse_fuzzer.c
parentAdding upstream version 1.7.2+ds. (diff)
downloadlibgit2-upstream.tar.xz
libgit2-upstream.zip
Adding upstream version 1.8.1+ds.upstream/1.8.1+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'fuzzers/revparse_fuzzer.c')
-rw-r--r--fuzzers/revparse_fuzzer.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/fuzzers/revparse_fuzzer.c b/fuzzers/revparse_fuzzer.c
new file mode 100644
index 0000000..37c22e2
--- /dev/null
+++ b/fuzzers/revparse_fuzzer.c
@@ -0,0 +1,52 @@
+/*
+ * libgit2 revparse fuzzer 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 <stdio.h>
+#include <string.h>
+
+#include "git2.h"
+
+#include "standalone_driver.h"
+#include "fuzzer_utils.h"
+
+#define UNUSED(x) (void)(x)
+
+static git_repository *repo;
+
+int LLVMFuzzerInitialize(int *argc, char ***argv)
+{
+ UNUSED(argc);
+ UNUSED(argv);
+
+ if (git_libgit2_init() < 0)
+ abort();
+
+ if (git_libgit2_opts(GIT_OPT_SET_PACK_MAX_OBJECTS, 10000000) < 0)
+ abort();
+
+ repo = fuzzer_repo_init();
+ return 0;
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
+{
+ git_object *obj = NULL;
+ char *c;
+
+ if ((c = calloc(1, size + 1)) == NULL)
+ abort();
+
+ memcpy(c, data, size);
+
+ git_revparse_single(&obj, repo, c);
+ git_object_free(obj);
+ free(c);
+
+ return 0;
+}