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