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