1*748408edSchristos #include <stdint.h>
2*748408edSchristos #include <stdlib.h>
3*748408edSchristos #include <stdio.h>
4*748408edSchristos
5*748408edSchristos int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
6*748408edSchristos void fuzz_openFile(const char * name);
7*748408edSchristos
main(int argc,char ** argv)8*748408edSchristos int main(int argc, char** argv)
9*748408edSchristos {
10*748408edSchristos FILE * fp;
11*748408edSchristos uint8_t *Data;
12*748408edSchristos size_t Size;
13*748408edSchristos
14*748408edSchristos if (argc == 3) {
15*748408edSchristos fuzz_openFile(argv[2]);
16*748408edSchristos } else if (argc != 2) {
17*748408edSchristos return 1;
18*748408edSchristos }
19*748408edSchristos //opens the file, get its size, and reads it into a buffer
20*748408edSchristos fp = fopen(argv[1], "rb");
21*748408edSchristos if (fp == NULL) {
22*748408edSchristos return 2;
23*748408edSchristos }
24*748408edSchristos if (fseek(fp, 0L, SEEK_END) != 0) {
25*748408edSchristos fclose(fp);
26*748408edSchristos return 2;
27*748408edSchristos }
28*748408edSchristos Size = ftell(fp);
29*748408edSchristos if (Size == (size_t) -1) {
30*748408edSchristos fclose(fp);
31*748408edSchristos return 2;
32*748408edSchristos }
33*748408edSchristos if (fseek(fp, 0L, SEEK_SET) != 0) {
34*748408edSchristos fclose(fp);
35*748408edSchristos return 2;
36*748408edSchristos }
37*748408edSchristos Data = malloc(Size);
38*748408edSchristos if (Data == NULL) {
39*748408edSchristos fclose(fp);
40*748408edSchristos return 2;
41*748408edSchristos }
42*748408edSchristos if (fread(Data, Size, 1, fp) != 1) {
43*748408edSchristos fclose(fp);
44*748408edSchristos free(Data);
45*748408edSchristos return 2;
46*748408edSchristos }
47*748408edSchristos
48*748408edSchristos //launch fuzzer
49*748408edSchristos LLVMFuzzerTestOneInput(Data, Size);
50*748408edSchristos free(Data);
51*748408edSchristos fclose(fp);
52*748408edSchristos return 0;
53*748408edSchristos }
54*748408edSchristos
55