xref: /aosp_15_r20/external/AFLplusplus/test-instr.c (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
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