xref: /netbsd-src/external/bsd/libpcap/dist/testprogs/fuzz/onefile.c (revision 748408ed59e7aef1b0dd2f652356b3c051bb3440)
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