xref: /third_party/cJSON/fuzzing/fuzz_main.c (revision 9750e409)
1#include <stdint.h>
2#include <stdio.h>
3#include <stdlib.h>
4
5int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); /* required by C89 */
6
7/* fuzz target entry point, works without libFuzzer */
8
9int main(int argc, char **argv)
10{
11    FILE *f;
12    char *buf = NULL;
13    long siz_buf;
14
15    if(argc < 2)
16    {
17        fprintf(stderr, "no input file\n");
18        goto err;
19    }
20
21    f = fopen(argv[1], "rb");
22    if(f == NULL)
23    {
24        fprintf(stderr, "error opening input file %s\n", argv[1]);
25        goto err;
26    }
27
28    fseek(f, 0, SEEK_END);
29
30    siz_buf = ftell(f);
31    rewind(f);
32
33    if(siz_buf < 1) goto err;
34
35    buf = (char*)malloc((size_t)siz_buf);
36    if(buf == NULL)
37    {
38        fprintf(stderr, "malloc() failed\n");
39        goto err;
40    }
41
42    if(fread(buf, (size_t)siz_buf, 1, f) != 1)
43    {
44        fprintf(stderr, "fread() failed\n");
45        goto err;
46    }
47
48    (void)LLVMFuzzerTestOneInput((uint8_t*)buf, (size_t)siz_buf);
49
50err:
51    free(buf);
52
53    return 0;
54}
55