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