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