diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-12-19 01:10:11 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-12-19 01:10:11 +0300 |
commit | 333536527011ebcc0a4d1e7f072dc435f605e224 (patch) | |
tree | 61930a1853b1b556e5acecc8dcb1cfae1e809efb | |
parent | 71c746632aeeae0c4f87fa27db410c459c5c1658 (diff) | |
parent | ee41e2d41ffe05b0521e1b6d929b59db310d326e (diff) |
Merge branch 'ac/fuzz-show-date'
Subject approxidate() and show_date() machinery to OSS-Fuzz.
* ac/fuzz-show-date:
fuzz: add new oss-fuzz fuzzer for date.c / date.h
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | oss-fuzz/.gitignore | 1 | ||||
-rw-r--r-- | oss-fuzz/fuzz-date.c | 49 |
3 files changed, 51 insertions, 0 deletions
@@ -753,6 +753,7 @@ SCRIPTS = $(SCRIPT_SH_GEN) \ ETAGS_TARGET = TAGS FUZZ_OBJS += oss-fuzz/fuzz-commit-graph.o +FUZZ_OBJS += oss-fuzz/fuzz-date.o FUZZ_OBJS += oss-fuzz/fuzz-pack-headers.o FUZZ_OBJS += oss-fuzz/fuzz-pack-idx.o .PHONY: fuzz-objs diff --git a/oss-fuzz/.gitignore b/oss-fuzz/.gitignore index 9acb74412e..5b95408825 100644 --- a/oss-fuzz/.gitignore +++ b/oss-fuzz/.gitignore @@ -1,3 +1,4 @@ fuzz-commit-graph +fuzz-date fuzz-pack-headers fuzz-pack-idx diff --git a/oss-fuzz/fuzz-date.c b/oss-fuzz/fuzz-date.c new file mode 100644 index 0000000000..036378b946 --- /dev/null +++ b/oss-fuzz/fuzz-date.c @@ -0,0 +1,49 @@ +#include "git-compat-util.h" +#include "date.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + int local; + int num; + char *str; + int16_t tz; + timestamp_t ts; + enum date_mode_type dmtype; + struct date_mode *dm; + + if (size <= 4) + /* + * we use the first byte to fuzz dmtype and the + * second byte to fuzz local, then the next two + * bytes to fuzz tz offset. The remainder + * (at least one byte) is fed as input to + * approxidate_careful(). + */ + return 0; + + local = !!(*data++ & 0x10); + num = *data++ % DATE_UNIX; + if (num >= DATE_STRFTIME) + num++; + dmtype = (enum date_mode_type)num; + size -= 2; + + tz = *data++; + tz = (tz << 8) | *data++; + size -= 2; + + str = xmemdupz(data, size); + + ts = approxidate_careful(str, &num); + free(str); + + dm = date_mode_from_type(dmtype); + dm->local = local; + show_date(ts, (int)tz, dm); + + date_mode_release(dm); + + return 0; +} |