Merge branch 'master' of https://github.com/bvanassche/fio
[fio.git] / t / fuzz / fuzz_parseini.c
1 #include "fio.h"
2
3 static int initialized = 0;
4
5 const char *const fakeargv[] = {(char *) "fuzz",
6         (char *) "--output", (char *) "/dev/null",
7         (char *) "--parse-only",
8         0};
9
10 int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
11 {
12         char *fuzzedini;
13
14         if (size < 2)
15                 return 0;
16
17         if (initialized == 0) {
18                 if (fio_init_options()) {
19                         printf("Failed fio_init_options\n");
20                         return 1;
21                 }
22
23                 parse_cmd_line(4, (char **) fakeargv, 0);
24                 sinit();
25
26                 initialized = 1;
27         }
28         fuzzedini = malloc(size);
29         if (!fuzzedini) {
30                 printf("Failed malloc\n");
31                 return 1;
32         }
33         /* final character is type for parse_jobs_ini */
34         memcpy(fuzzedini, data, size - 1);
35         /* ensures final 0 */
36         fuzzedini[size - 1] = 0;
37
38         parse_jobs_ini(fuzzedini, 1, 0, data[size - 1]);
39         free(fuzzedini);
40         return 0;
41 }