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