blob: 3b2709f80585bd737cd6a8bd8ed40acd7813c62d [file] [log] [blame]
Philippe Antoine72333522018-05-03 16:40:24 +02001#include <stdint.h>
Philippe Antoine72333522018-05-03 16:40:24 +02002#include <stdlib.h>
3#include <stdio.h>
Gilles Peskine26f3e282019-08-13 18:00:02 +02004
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +02005/* This file doesn't use any Mbed TLS function, but grab mbedtls_config.h anyway
Gilles Peskine26f3e282019-08-13 18:00:02 +02006 * in case it contains platform-specific #defines related to malloc or
7 * stdio functions. */
Bence Szépkútic662b362021-05-27 11:25:03 +02008#include "mbedtls/build_info.h"
Philippe Antoine72333522018-05-03 16:40:24 +02009
10int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
11
Gilles Peskine449bd832023-01-11 14:50:10 +010012int main(int argc, char **argv)
Philippe Antoine72333522018-05-03 16:40:24 +020013{
Gilles Peskine449bd832023-01-11 14:50:10 +010014 FILE *fp;
Philippe Antoine72333522018-05-03 16:40:24 +020015 uint8_t *Data;
16 size_t Size;
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020017 const char *argv0 = argv[0] == NULL ? "PROGRAM_NAME" : argv[0];
Philippe Antoine72333522018-05-03 16:40:24 +020018
19 if (argc != 2) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020020 fprintf(stderr, "Usage: %s REPRODUCER_FILE\n", argv0);
Philippe Antoine72333522018-05-03 16:40:24 +020021 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) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020026 fprintf(stderr, "%s: Error in fopen\n", argv0);
27 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020028 return 2;
29 }
30 if (fseek(fp, 0L, SEEK_END) != 0) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020031 fprintf(stderr, "%s: Error in fseek(SEEK_END)\n", argv0);
32 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020033 fclose(fp);
34 return 2;
35 }
36 Size = ftell(fp);
37 if (Size == (size_t) -1) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020038 fprintf(stderr, "%s: Error in ftell\n", argv0);
39 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020040 fclose(fp);
41 return 2;
42 }
43 if (fseek(fp, 0L, SEEK_SET) != 0) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020044 fprintf(stderr, "%s: Error in fseek(0)\n", argv0);
45 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020046 fclose(fp);
47 return 2;
48 }
49 Data = malloc(Size);
50 if (Data == NULL) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020051 fprintf(stderr, "%s: Could not allocate memory\n", argv0);
52 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020053 fclose(fp);
54 return 2;
55 }
56 if (fread(Data, Size, 1, fp) != 1) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020057 fprintf(stderr, "%s: Error in fread\n", argv0);
58 perror(argv[1]);
Philippe Antoine3abe15b2019-06-04 12:06:34 +020059 free(Data);
Philippe Antoine72333522018-05-03 16:40:24 +020060 fclose(fp);
61 return 2;
62 }
63
Shaun Case8b0ecbc2021-12-20 21:14:10 -080064 //launch fuzzer
Philippe Antoine72333522018-05-03 16:40:24 +020065 LLVMFuzzerTestOneInput(Data, Size);
Philippe Antoine3abe15b2019-06-04 12:06:34 +020066 free(Data);
Philippe Antoine72333522018-05-03 16:40:24 +020067 fclose(fp);
68 return 0;
69}