1*08b48e0bSAndroid Build Coastguard Worker /*
2*08b48e0bSAndroid Build Coastguard Worker american fuzzy lop++ - a trivial program to test the build
3*08b48e0bSAndroid Build Coastguard Worker --------------------------------------------------------
4*08b48e0bSAndroid Build Coastguard Worker Originally written by Michal Zalewski
5*08b48e0bSAndroid Build Coastguard Worker Copyright 2014 Google Inc. All rights reserved.
6*08b48e0bSAndroid Build Coastguard Worker Copyright 2019-2024 AFLplusplus Project. All rights reserved.
7*08b48e0bSAndroid Build Coastguard Worker Licensed under the Apache License, Version 2.0 (the "License");
8*08b48e0bSAndroid Build Coastguard Worker you may not use this file except in compliance with the License.
9*08b48e0bSAndroid Build Coastguard Worker You may obtain a copy of the License at:
10*08b48e0bSAndroid Build Coastguard Worker https://www.apache.org/licenses/LICENSE-2.0
11*08b48e0bSAndroid Build Coastguard Worker */
12*08b48e0bSAndroid Build Coastguard Worker
13*08b48e0bSAndroid Build Coastguard Worker #include <stdio.h>
14*08b48e0bSAndroid Build Coastguard Worker #include <stdlib.h>
15*08b48e0bSAndroid Build Coastguard Worker #include <unistd.h>
16*08b48e0bSAndroid Build Coastguard Worker #include <string.h>
17*08b48e0bSAndroid Build Coastguard Worker #include <sys/types.h>
18*08b48e0bSAndroid Build Coastguard Worker #include <sys/stat.h>
19*08b48e0bSAndroid Build Coastguard Worker #include <fcntl.h>
20*08b48e0bSAndroid Build Coastguard Worker
21*08b48e0bSAndroid Build Coastguard Worker #ifdef TEST_SHARED_OBJECT
22*08b48e0bSAndroid Build Coastguard Worker #define main main_exported
23*08b48e0bSAndroid Build Coastguard Worker #endif
24*08b48e0bSAndroid Build Coastguard Worker
main(int argc,char ** argv)25*08b48e0bSAndroid Build Coastguard Worker int main(int argc, char **argv) {
26*08b48e0bSAndroid Build Coastguard Worker
27*08b48e0bSAndroid Build Coastguard Worker int fd = 0, cnt;
28*08b48e0bSAndroid Build Coastguard Worker char buff[8];
29*08b48e0bSAndroid Build Coastguard Worker char *buf = buff;
30*08b48e0bSAndroid Build Coastguard Worker
31*08b48e0bSAndroid Build Coastguard Worker // we support command line parameter and stdin
32*08b48e0bSAndroid Build Coastguard Worker if (argc == 2) {
33*08b48e0bSAndroid Build Coastguard Worker
34*08b48e0bSAndroid Build Coastguard Worker buf = argv[1];
35*08b48e0bSAndroid Build Coastguard Worker
36*08b48e0bSAndroid Build Coastguard Worker } else {
37*08b48e0bSAndroid Build Coastguard Worker
38*08b48e0bSAndroid Build Coastguard Worker if (argc >= 3 && strcmp(argv[1], "-f") == 0) {
39*08b48e0bSAndroid Build Coastguard Worker
40*08b48e0bSAndroid Build Coastguard Worker if ((fd = open(argv[2], O_RDONLY)) < 0) {
41*08b48e0bSAndroid Build Coastguard Worker
42*08b48e0bSAndroid Build Coastguard Worker fprintf(stderr, "Error: unable to open %s\n", argv[2]);
43*08b48e0bSAndroid Build Coastguard Worker exit(-1);
44*08b48e0bSAndroid Build Coastguard Worker
45*08b48e0bSAndroid Build Coastguard Worker }
46*08b48e0bSAndroid Build Coastguard Worker
47*08b48e0bSAndroid Build Coastguard Worker }
48*08b48e0bSAndroid Build Coastguard Worker
49*08b48e0bSAndroid Build Coastguard Worker if ((cnt = read(fd, buf, sizeof(buf) - 1)) < 1) {
50*08b48e0bSAndroid Build Coastguard Worker
51*08b48e0bSAndroid Build Coastguard Worker printf("Hum?\n");
52*08b48e0bSAndroid Build Coastguard Worker return 1;
53*08b48e0bSAndroid Build Coastguard Worker
54*08b48e0bSAndroid Build Coastguard Worker }
55*08b48e0bSAndroid Build Coastguard Worker
56*08b48e0bSAndroid Build Coastguard Worker buf[cnt] = 0;
57*08b48e0bSAndroid Build Coastguard Worker
58*08b48e0bSAndroid Build Coastguard Worker }
59*08b48e0bSAndroid Build Coastguard Worker
60*08b48e0bSAndroid Build Coastguard Worker if (getenv("AFL_DEBUG")) fprintf(stderr, "test-instr: %s\n", buf);
61*08b48e0bSAndroid Build Coastguard Worker
62*08b48e0bSAndroid Build Coastguard Worker // we support three input cases (plus a 4th if stdin is used but there is no
63*08b48e0bSAndroid Build Coastguard Worker // input)
64*08b48e0bSAndroid Build Coastguard Worker switch (buf[0]) {
65*08b48e0bSAndroid Build Coastguard Worker
66*08b48e0bSAndroid Build Coastguard Worker case '0':
67*08b48e0bSAndroid Build Coastguard Worker printf("Looks like a zero to me!\n");
68*08b48e0bSAndroid Build Coastguard Worker break;
69*08b48e0bSAndroid Build Coastguard Worker
70*08b48e0bSAndroid Build Coastguard Worker case '1':
71*08b48e0bSAndroid Build Coastguard Worker printf("Pretty sure that is a one!\n");
72*08b48e0bSAndroid Build Coastguard Worker break;
73*08b48e0bSAndroid Build Coastguard Worker
74*08b48e0bSAndroid Build Coastguard Worker default:
75*08b48e0bSAndroid Build Coastguard Worker printf("Neither one or zero? How quaint!\n");
76*08b48e0bSAndroid Build Coastguard Worker break;
77*08b48e0bSAndroid Build Coastguard Worker
78*08b48e0bSAndroid Build Coastguard Worker }
79*08b48e0bSAndroid Build Coastguard Worker
80*08b48e0bSAndroid Build Coastguard Worker return 0;
81*08b48e0bSAndroid Build Coastguard Worker
82*08b48e0bSAndroid Build Coastguard Worker }
83*08b48e0bSAndroid Build Coastguard Worker
84