xref: /aosp_15_r20/external/lz4/ossfuzz/standaloneengine.c (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
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