| #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; | |
| } |