blob: 2d4330abc346851d1d648a88b2a7a6505eaa2e94 [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>
Michael Schuster41a686b2024-06-01 21:08:45 +02004#include "common.h"
Gilles Peskine26f3e282019-08-13 18:00:02 +02005
Bence Szépkútibb0cfeb2021-05-28 09:42:25 +02006/* This file doesn't use any Mbed TLS function, but grab mbedtls_config.h anyway
Gilles Peskine26f3e282019-08-13 18:00:02 +02007 * in case it contains platform-specific #defines related to malloc or
8 * stdio functions. */
Bence Szépkútic662b362021-05-27 11:25:03 +02009#include "mbedtls/build_info.h"
Philippe Antoine72333522018-05-03 16:40:24 +020010
Gilles Peskine449bd832023-01-11 14:50:10 +010011int main(int argc, char **argv)
Philippe Antoine72333522018-05-03 16:40:24 +020012{
Gilles Peskine449bd832023-01-11 14:50:10 +010013 FILE *fp;
Philippe Antoine72333522018-05-03 16:40:24 +020014 uint8_t *Data;
15 size_t Size;
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020016 const char *argv0 = argv[0] == NULL ? "PROGRAM_NAME" : argv[0];
Philippe Antoine72333522018-05-03 16:40:24 +020017
18 if (argc != 2) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020019 fprintf(stderr, "Usage: %s REPRODUCER_FILE\n", argv0);
Philippe Antoine72333522018-05-03 16:40:24 +020020 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) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020025 fprintf(stderr, "%s: Error in fopen\n", argv0);
26 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020027 return 2;
28 }
29 if (fseek(fp, 0L, SEEK_END) != 0) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020030 fprintf(stderr, "%s: Error in fseek(SEEK_END)\n", argv0);
31 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020032 fclose(fp);
33 return 2;
34 }
35 Size = ftell(fp);
36 if (Size == (size_t) -1) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020037 fprintf(stderr, "%s: Error in ftell\n", argv0);
38 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020039 fclose(fp);
40 return 2;
41 }
42 if (fseek(fp, 0L, SEEK_SET) != 0) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020043 fprintf(stderr, "%s: Error in fseek(0)\n", argv0);
44 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020045 fclose(fp);
46 return 2;
47 }
48 Data = malloc(Size);
49 if (Data == NULL) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020050 fprintf(stderr, "%s: Could not allocate memory\n", argv0);
51 perror(argv[1]);
Philippe Antoine72333522018-05-03 16:40:24 +020052 fclose(fp);
53 return 2;
54 }
55 if (fread(Data, Size, 1, fp) != 1) {
Gilles Peskine1f9d8a42023-05-12 13:18:08 +020056 fprintf(stderr, "%s: Error in fread\n", argv0);
57 perror(argv[1]);
Philippe Antoine3abe15b2019-06-04 12:06:34 +020058 free(Data);
Philippe Antoine72333522018-05-03 16:40:24 +020059 fclose(fp);
60 return 2;
61 }
62
Shaun Case8b0ecbc2021-12-20 21:14:10 -080063 //launch fuzzer
Philippe Antoine72333522018-05-03 16:40:24 +020064 LLVMFuzzerTestOneInput(Data, Size);
Philippe Antoine3abe15b2019-06-04 12:06:34 +020065 free(Data);
Philippe Antoine72333522018-05-03 16:40:24 +020066 fclose(fp);
67 return 0;
68}