onefile.c (1771B)
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 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 }