]> git.ipfire.org Git - thirdparty/git.git/blob - oss-fuzz/fuzz-date.c
Merge branch 'rs/parse-options-with-keep-unknown-abbrev-fix'
[thirdparty/git.git] / oss-fuzz / fuzz-date.c
1 #include "git-compat-util.h"
2 #include "date.h"
3
4 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
5
6 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
7 {
8 int local;
9 int num;
10 char *str;
11 int16_t tz;
12 timestamp_t ts;
13 enum date_mode_type dmtype;
14 struct date_mode *dm;
15
16 if (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 */
24 return 0;
25
26 local = !!(*data++ & 0x10);
27 num = *data++ % DATE_UNIX;
28 if (num >= DATE_STRFTIME)
29 num++;
30 dmtype = (enum date_mode_type)num;
31 size -= 2;
32
33 tz = *data++;
34 tz = (tz << 8) | *data++;
35 size -= 2;
36
37 str = xmemdupz(data, size);
38
39 ts = approxidate_careful(str, &num);
40 free(str);
41
42 dm = date_mode_from_type(dmtype);
43 dm->local = local;
44 show_date(ts, (int)tz, dm);
45
46 date_mode_release(dm);
47
48 return 0;
49 }