1#include <stdint.h> 2#include <stdio.h> 3#include <stdlib.h> 4 5#include "testinput.h" 6 7/** 8 * Main procedure for standalone fuzzing engine. 9 * 10 * Reads filenames from the argument array. For each filename, read the file 11 * into memory and then call the fuzzing interface with the data. 12 */ 13int main(int argc, char **argv) 14{ 15 int ii; 16 for(ii = 1; ii < argc; ii++) 17 { 18 FILE *infile; 19 printf("[%s] ", argv[ii]); 20 21 /* Try and open the file. */ 22 infile = fopen(argv[ii], "rb"); 23 if(infile) 24 { 25 uint8_t *buffer = NULL; 26 size_t buffer_len; 27 28 printf("Opened.. "); 29 30 /* Get the length of the file. */ 31 fseek(infile, 0L, SEEK_END); 32 buffer_len = ftell(infile); 33 34 /* Reset the file indicator to the beginning of the file. */ 35 fseek(infile, 0L, SEEK_SET); 36 37 /* Allocate a buffer for the file contents. */ 38 buffer = (uint8_t *)calloc(buffer_len, sizeof(uint8_t)); 39 if(buffer) 40 { 41 size_t result; 42 43 /* Read all the text from the file into the buffer. */ 44 result = fread(buffer, sizeof(uint8_t), buffer_len, infile); 45 46 if (result == buffer_len) 47 { 48 printf("Read %zu bytes, fuzzing.. ", buffer_len); 49 /* Call the fuzzer with the data. */ 50 LLVMFuzzerTestOneInput(buffer, buffer_len); 51 52 printf("complete !!"); 53 } 54 else 55 { 56 fprintf(stderr, 57 "Failed to read %zu bytes (result %zu)\n", 58 buffer_len, 59 result); 60 } 61 62 /* Free the buffer as it's no longer needed. */ 63 free(buffer); 64 buffer = NULL; 65 } 66 else 67 { 68 fprintf(stderr, 69 "[%s] Failed to allocate %zu bytes \n", 70 argv[ii], 71 buffer_len); 72 } 73 74 /* Close the file as it's no longer needed. */ 75 fclose(infile); 76 infile = NULL; 77 } 78 else 79 { 80 /* Failed to open the file. Maybe wrong name or wrong permissions? */ 81 fprintf(stderr, "[%s] Open failed. \n", argv[ii]); 82 } 83 84 printf("\n"); 85 } 86} 87