]> git.ipfire.org Git - thirdparty/git.git/commitdiff
oss-fuzz: add fuzzer for parsing reftables
authorPatrick Steinhardt <ps@pks.im>
Wed, 24 Jun 2026 08:23:05 +0000 (10:23 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2026 16:30:24 +0000 (09:30 -0700)
Add a new fuzzer that exercises our parsing of reftables. Fallout from
this fuzzer will be fixed over subsequent commits.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
ci/run-build-and-minimal-fuzzers.sh
oss-fuzz/.gitignore
oss-fuzz/fuzz-reftable.c [new file with mode: 0644]
oss-fuzz/meson.build

index cedc234173e3774132d45709b3f968d083a013a0..18cf8c24638b2a0ab30d97c109c55340732a71b5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2603,6 +2603,7 @@ FUZZ_OBJS += oss-fuzz/fuzz-date.o
 FUZZ_OBJS += oss-fuzz/fuzz-pack-headers.o
 FUZZ_OBJS += oss-fuzz/fuzz-pack-idx.o
 FUZZ_OBJS += oss-fuzz/fuzz-parse-attr-line.o
+FUZZ_OBJS += oss-fuzz/fuzz-reftable.o
 FUZZ_OBJS += oss-fuzz/fuzz-url-decode-mem.o
 .PHONY: fuzz-objs
 fuzz-objs: $(FUZZ_OBJS)
index e7b97952e7d485d587025fda383a470c32de54c3..37b24b092de2cd4963ef3d25d02cdb96a8a5756d 100755 (executable)
@@ -21,6 +21,7 @@ date
 pack-headers
 pack-idx
 parse-attr-line
+reftable
 url-decode-mem
 "
 
index f2d74de457259decd4d279dc1069c5615efa26ec..dc7a127a62c72365f63e9d39b413fa5b8eb14620 100644 (file)
@@ -5,4 +5,5 @@ fuzz-date
 fuzz-pack-headers
 fuzz-pack-idx
 fuzz-parse-attr-line
+fuzz-reftable
 fuzz-url-decode-mem
diff --git a/oss-fuzz/fuzz-reftable.c b/oss-fuzz/fuzz-reftable.c
new file mode 100644 (file)
index 0000000..c46eac2
--- /dev/null
@@ -0,0 +1,74 @@
+#include "git-compat-util.h"
+#include "reftable/basics.h"
+#include "reftable/blocksource.h"
+#include "reftable/reftable-blocksource.h"
+#include "reftable/reftable-error.h"
+#include "reftable/reftable-iterator.h"
+#include "reftable/reftable-record.h"
+#include "reftable/reftable-table.h"
+#include "reftable/reftable-writer.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
+{
+       struct reftable_block_source source = { 0 };
+       struct reftable_buf buf = REFTABLE_BUF_INIT;
+       struct reftable_table *table = NULL;
+       int err;
+
+       if (reftable_buf_add(&buf, (const char *)data, size) < 0)
+               goto out;
+       block_source_from_buf(&source, &buf);
+
+       err = reftable_table_new(&table, &source, "fuzz-input");
+       if (err < 0)
+               goto out;
+
+       /*
+        * Exercise the ref, log and raw block iterators so that we cover as
+        * much of the parsing code as possible.
+        */
+       {
+               struct reftable_ref_record ref = { 0 };
+               struct reftable_iterator it = { 0 };
+
+               reftable_table_init_ref_iterator(table, &it);
+               if (!reftable_iterator_seek_ref(&it, ""))
+                       while (!reftable_iterator_next_ref(&it, &ref))
+                               ;
+
+               reftable_ref_record_release(&ref);
+               reftable_iterator_destroy(&it);
+       }
+
+       {
+               struct reftable_log_record log = { 0 };
+               struct reftable_iterator it = { 0 };
+
+               reftable_table_init_log_iterator(table, &it);
+               if (!reftable_iterator_seek_log(&it, ""))
+                       while (!reftable_iterator_next_log(&it, &log))
+                               ;
+
+               reftable_log_record_release(&log);
+               reftable_iterator_destroy(&it);
+       }
+
+       {
+               struct reftable_table_iterator it = { 0 };
+               const struct reftable_block *block;
+
+               if (!reftable_table_iterator_init(&it, table))
+                       while (!reftable_table_iterator_next(&it, &block))
+                               ;
+
+               reftable_table_iterator_release(&it);
+       }
+
+out:
+       if (table)
+               reftable_table_decref(table);
+       reftable_buf_release(&buf);
+       return 0;
+}
index 10bcac2f6d6bb74561a753907cdef0e703c780ac..5a3854256b86e6884edd1d7a5ae0ea8819c8a853 100644 (file)
@@ -6,6 +6,7 @@ fuzz_programs = [
   'fuzz-pack-headers.c',
   'fuzz-pack-idx.c',
   'fuzz-parse-attr-line.c',
+  'fuzz-reftable.c',
   'fuzz-url-decode-mem.c',
 ]