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