1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include "common.h"
5 
6 /* This file doesn't use any Mbed TLS function, but grab mbedtls_config.h anyway
7  * in case it contains platform-specific #defines related to malloc or
8  * stdio functions. */
9 #include "mbedtls/build_info.h"
10 
main(int argc,char ** argv)11 int main(int argc, char **argv)
12 {
13     FILE *fp;
14     uint8_t *Data;
15     size_t Size;
16     const char *argv0 = argv[0] == NULL ? "PROGRAM_NAME" : argv[0];
17 
18     if (argc != 2) {
19         fprintf(stderr, "Usage: %s REPRODUCER_FILE\n", argv0);
20         return 1;
21     }
22     //opens the file, get its size, and reads it into a buffer
23     fp = fopen(argv[1], "rb");
24     if (fp == NULL) {
25         fprintf(stderr, "%s: Error in fopen\n", argv0);
26         perror(argv[1]);
27         return 2;
28     }
29     if (fseek(fp, 0L, SEEK_END) != 0) {
30         fprintf(stderr, "%s: Error in fseek(SEEK_END)\n", argv0);
31         perror(argv[1]);
32         fclose(fp);
33         return 2;
34     }
35     Size = ftell(fp);
36     if (Size == (size_t) -1) {
37         fprintf(stderr, "%s: Error in ftell\n", argv0);
38         perror(argv[1]);
39         fclose(fp);
40         return 2;
41     }
42     if (fseek(fp, 0L, SEEK_SET) != 0) {
43         fprintf(stderr, "%s: Error in fseek(0)\n", argv0);
44         perror(argv[1]);
45         fclose(fp);
46         return 2;
47     }
48     Data = malloc(Size);
49     if (Data == NULL) {
50         fprintf(stderr, "%s: Could not allocate memory\n", argv0);
51         perror(argv[1]);
52         fclose(fp);
53         return 2;
54     }
55     if (fread(Data, Size, 1, fp) != 1) {
56         fprintf(stderr, "%s: Error in fread\n", argv0);
57         perror(argv[1]);
58         free(Data);
59         fclose(fp);
60         return 2;
61     }
62 
63     //launch fuzzer
64     LLVMFuzzerTestOneInput(Data, Size);
65     free(Data);
66     fclose(fp);
67     return 0;
68 }
69