From: Arthur Chan <arthur.chan@xxxxxxxxxxxxx> Signed-off-by: Arthur Chan <arthur.chan@xxxxxxxxxxxxx> --- fuzz: add new oss-fuzz fuzzer for date.c / date.h This patch is aimed to add a new oss-fuzz fuzzer to the oss-fuzz directory for fuzzing date.c / date.h in the base directory. The .gitignore of the oss-fuzz directory and the Makefile have been modified to accommodate the new fuzzer fuzz-date.c. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1612%2Farthurscchan%2Fnew-fuzzer-date-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1612/arthurscchan/new-fuzzer-date-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1612 Makefile | 1 + oss-fuzz/.gitignore | 1 + oss-fuzz/fuzz-date.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 oss-fuzz/fuzz-date.c diff --git a/Makefile b/Makefile index 03adcb5a480..c9fe99a8c88 100644 --- a/Makefile +++ b/Makefile @@ -752,6 +752,7 @@ ETAGS_TARGET = TAGS FUZZ_OBJS += oss-fuzz/fuzz-commit-graph.o FUZZ_OBJS += oss-fuzz/fuzz-pack-headers.o FUZZ_OBJS += oss-fuzz/fuzz-pack-idx.o +FUZZ_OBJS += oss-fuzz/fuzz-date.o .PHONY: fuzz-objs fuzz-objs: $(FUZZ_OBJS) diff --git a/oss-fuzz/.gitignore b/oss-fuzz/.gitignore index 9acb74412ef..2375e77b108 100644 --- a/oss-fuzz/.gitignore +++ b/oss-fuzz/.gitignore @@ -1,3 +1,4 @@ fuzz-commit-graph fuzz-pack-headers fuzz-pack-idx +fuzz-date diff --git a/oss-fuzz/fuzz-date.c b/oss-fuzz/fuzz-date.c new file mode 100644 index 00000000000..29bcaf595e4 --- /dev/null +++ b/oss-fuzz/fuzz-date.c @@ -0,0 +1,75 @@ +#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 type; + int time; + int num; + char *str; + timestamp_t ts; + enum date_mode_type dmtype; + struct date_mode *dm; + + if (size <= 8) + { + return 0; + } + + type = (*((int *)data)) % 8; + data += 4; + size -= 4; + + time = abs(*((int *)data)); + data += 4; + size -= 4; + + str = (char *)malloc(size+1); + if (!str) + { + return 0; + } + memcpy(str, data, size); + str[size] = '\0'; + + ts = approxidate_careful(str, &num); + free(str); + + switch(type) + { + case 0: default: + dmtype = DATE_NORMAL; + break; + case 1: + dmtype = DATE_HUMAN; + break; + case 2: + dmtype = DATE_SHORT; + break; + case 3: + dmtype = DATE_ISO8601; + break; + case 4: + dmtype = DATE_ISO8601_STRICT; + break; + case 5: + dmtype = DATE_RFC2822; + break; + case 6: + dmtype = DATE_RAW; + break; + case 7: + dmtype = DATE_UNIX; + break; + } + + dm = date_mode_from_type(dmtype); + dm->local = 1; + show_date(ts, time, dm); + + date_mode_release(dm); + + return 0; +} base-commit: dadef801b365989099a9929e995589e455c51fed -- gitgitgadget