File: fuzz_parseini.c

package info (click to toggle)
fio 3.41-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,012 kB
  • sloc: ansic: 82,290; python: 9,862; sh: 6,067; makefile: 813; yacc: 204; lex: 184
file content (41 lines) | stat: -rw-r--r-- 778 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "fio.h"

static int initialized = 0;

const char *const fakeargv[] = {(char *) "fuzz",
	(char *) "--output", (char *) "/dev/null",
	(char *) "--parse-only",
	0};

int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
	char *fuzzedini;

	if (size < 2)
		return 0;

	if (initialized == 0) {
		if (fio_init_options()) {
			printf("Failed fio_init_options\n");
			return 1;
		}

		parse_cmd_line(4, (char **) fakeargv, 0);
		sinit();

		initialized = 1;
	}
	fuzzedini = malloc(size);
	if (!fuzzedini) {
		printf("Failed malloc\n");
		return 1;
	}
	/* final character is type for parse_jobs_ini */
	memcpy(fuzzedini, data, size - 1);
	/* ensures final 0 */
	fuzzedini[size - 1] = 0;

	parse_jobs_ini(fuzzedini, 1, 0, data[size - 1]);
	free(fuzzedini);
	return 0;
}