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