git
1#include "git-compat-util.h"2#include "date.h"3
4int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);5
6int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)7{
8int local;9int num;10char *str;11int16_t tz;12timestamp_t ts;13enum date_mode_type dmtype;14struct date_mode dm;15
16if (size <= 4)17/*18* we use the first byte to fuzz dmtype and the
19* second byte to fuzz local, then the next two
20* bytes to fuzz tz offset. The remainder
21* (at least one byte) is fed as input to
22* approxidate_careful().
23*/
24return 0;25
26local = !!(*data++ & 0x10);27num = *data++ % DATE_UNIX;28if (num >= DATE_STRFTIME)29num++;30dmtype = (enum date_mode_type)num;31size -= 2;32
33tz = *data++;34tz = (tz << 8) | *data++;35size -= 2;36
37str = xmemdupz(data, size);38
39ts = approxidate_careful(str, &num);40free(str);41
42dm = date_mode_from_type(dmtype);43dm.local = local;44show_date(ts, (int)tz, dm);45
46date_mode_release(&dm);47
48return 0;49}
50