xref: /aosp_15_r20/external/brotli/c/fuzz/run_decode_fuzzer.c (revision f4ee7fba7774faf2a30f13154332c0a06550dbc4)
1*f4ee7fbaSAndroid Build Coastguard Worker /* Copyright 2016 Google Inc. All Rights Reserved.
2*f4ee7fbaSAndroid Build Coastguard Worker 
3*f4ee7fbaSAndroid Build Coastguard Worker    Distributed under MIT license.
4*f4ee7fbaSAndroid Build Coastguard Worker    See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5*f4ee7fbaSAndroid Build Coastguard Worker */
6*f4ee7fbaSAndroid Build Coastguard Worker 
7*f4ee7fbaSAndroid Build Coastguard Worker /* Simple runner for decode_fuzzer.cc */
8*f4ee7fbaSAndroid Build Coastguard Worker 
9*f4ee7fbaSAndroid Build Coastguard Worker #include <stdio.h>
10*f4ee7fbaSAndroid Build Coastguard Worker #include <string.h>
11*f4ee7fbaSAndroid Build Coastguard Worker #include <stdlib.h>
12*f4ee7fbaSAndroid Build Coastguard Worker #include <stdint.h>
13*f4ee7fbaSAndroid Build Coastguard Worker 
14*f4ee7fbaSAndroid Build Coastguard Worker void LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
15*f4ee7fbaSAndroid Build Coastguard Worker 
main(int argc,char ** argv)16*f4ee7fbaSAndroid Build Coastguard Worker int main(int argc, char* *argv) {
17*f4ee7fbaSAndroid Build Coastguard Worker   if (argc != 2) {
18*f4ee7fbaSAndroid Build Coastguard Worker     fprintf(stderr, "Exactly one argument is expected.\n");
19*f4ee7fbaSAndroid Build Coastguard Worker     exit(EXIT_FAILURE);
20*f4ee7fbaSAndroid Build Coastguard Worker   }
21*f4ee7fbaSAndroid Build Coastguard Worker 
22*f4ee7fbaSAndroid Build Coastguard Worker   FILE* f = fopen(argv[1], "r");
23*f4ee7fbaSAndroid Build Coastguard Worker   if (!f) {
24*f4ee7fbaSAndroid Build Coastguard Worker     fprintf(stderr, "Failed to open input file.");
25*f4ee7fbaSAndroid Build Coastguard Worker     exit(EXIT_FAILURE);
26*f4ee7fbaSAndroid Build Coastguard Worker   }
27*f4ee7fbaSAndroid Build Coastguard Worker 
28*f4ee7fbaSAndroid Build Coastguard Worker   size_t max_len = 1 << 20;
29*f4ee7fbaSAndroid Build Coastguard Worker   unsigned char* tmp = (unsigned char*)malloc(max_len);
30*f4ee7fbaSAndroid Build Coastguard Worker   size_t len = fread(tmp, 1, max_len, f);
31*f4ee7fbaSAndroid Build Coastguard Worker   if (ferror(f)) {
32*f4ee7fbaSAndroid Build Coastguard Worker     fclose(f);
33*f4ee7fbaSAndroid Build Coastguard Worker     fprintf(stderr, "Failed read input file.");
34*f4ee7fbaSAndroid Build Coastguard Worker     exit(EXIT_FAILURE);
35*f4ee7fbaSAndroid Build Coastguard Worker   }
36*f4ee7fbaSAndroid Build Coastguard Worker   /* Make data after the end "inaccessible". */
37*f4ee7fbaSAndroid Build Coastguard Worker   unsigned char* data = (unsigned char*)malloc(len);
38*f4ee7fbaSAndroid Build Coastguard Worker   memcpy(data, tmp, len);
39*f4ee7fbaSAndroid Build Coastguard Worker   free(tmp);
40*f4ee7fbaSAndroid Build Coastguard Worker 
41*f4ee7fbaSAndroid Build Coastguard Worker   LLVMFuzzerTestOneInput(data, len);
42*f4ee7fbaSAndroid Build Coastguard Worker   free(data);
43*f4ee7fbaSAndroid Build Coastguard Worker   exit(EXIT_SUCCESS);
44*f4ee7fbaSAndroid Build Coastguard Worker }
45