xref: /aosp_15_r20/external/AFLplusplus/utils/persistent_mode/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      http://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 #include <limits.h>
21*08b48e0bSAndroid Build Coastguard Worker 
22*08b48e0bSAndroid Build Coastguard Worker __AFL_FUZZ_INIT();
23*08b48e0bSAndroid Build Coastguard Worker 
24*08b48e0bSAndroid Build Coastguard Worker /* To ensure checks are not optimized out it is recommended to disable
25*08b48e0bSAndroid Build Coastguard Worker    code optimization for the fuzzer harness main() */
26*08b48e0bSAndroid Build Coastguard Worker #pragma clang optimize off
27*08b48e0bSAndroid Build Coastguard Worker #pragma GCC            optimize("O0")
28*08b48e0bSAndroid Build Coastguard Worker 
main(int argc,char ** argv)29*08b48e0bSAndroid Build Coastguard Worker int main(int argc, char **argv) {
30*08b48e0bSAndroid Build Coastguard Worker 
31*08b48e0bSAndroid Build Coastguard Worker   __AFL_INIT();
32*08b48e0bSAndroid Build Coastguard Worker   unsigned char *buf = __AFL_FUZZ_TESTCASE_BUF;
33*08b48e0bSAndroid Build Coastguard Worker 
34*08b48e0bSAndroid Build Coastguard Worker   while (__AFL_LOOP(UINT_MAX)) {  // if you have 100% stability
35*08b48e0bSAndroid Build Coastguard Worker 
36*08b48e0bSAndroid Build Coastguard Worker     unsigned int len = __AFL_FUZZ_TESTCASE_LEN;
37*08b48e0bSAndroid Build Coastguard Worker 
38*08b48e0bSAndroid Build Coastguard Worker #ifdef _AFL_DOCUMENT_MUTATIONS
39*08b48e0bSAndroid Build Coastguard Worker     static unsigned int counter = 0;
40*08b48e0bSAndroid Build Coastguard Worker     char                fn[32];
41*08b48e0bSAndroid Build Coastguard Worker     sprintf(fn, "%09u:test-instr", counter);
42*08b48e0bSAndroid Build Coastguard Worker     int fd_doc = open(fn, O_WRONLY | O_CREAT | O_TRUNC, 0600);
43*08b48e0bSAndroid Build Coastguard Worker     if (fd_doc >= 0) {
44*08b48e0bSAndroid Build Coastguard Worker 
45*08b48e0bSAndroid Build Coastguard Worker       if (write(fd_doc, buf, len) != __afl_fuzz_len) {
46*08b48e0bSAndroid Build Coastguard Worker 
47*08b48e0bSAndroid Build Coastguard Worker         fprintf(stderr, "write of mutation file failed: %s\n", fn);
48*08b48e0bSAndroid Build Coastguard Worker         unlink(fn);
49*08b48e0bSAndroid Build Coastguard Worker 
50*08b48e0bSAndroid Build Coastguard Worker       }
51*08b48e0bSAndroid Build Coastguard Worker 
52*08b48e0bSAndroid Build Coastguard Worker       close(fd_doc);
53*08b48e0bSAndroid Build Coastguard Worker 
54*08b48e0bSAndroid Build Coastguard Worker     }
55*08b48e0bSAndroid Build Coastguard Worker 
56*08b48e0bSAndroid Build Coastguard Worker     counter++;
57*08b48e0bSAndroid Build Coastguard Worker #endif
58*08b48e0bSAndroid Build Coastguard Worker 
59*08b48e0bSAndroid Build Coastguard Worker     // fprintf(stderr, "len: %u\n", len);
60*08b48e0bSAndroid Build Coastguard Worker 
61*08b48e0bSAndroid Build Coastguard Worker     if (!len) continue;
62*08b48e0bSAndroid Build Coastguard Worker 
63*08b48e0bSAndroid Build Coastguard Worker     if (buf[0] == '0')
64*08b48e0bSAndroid Build Coastguard Worker       printf("Looks like a zero to me!\n");
65*08b48e0bSAndroid Build Coastguard Worker     else if (buf[0] == '1')
66*08b48e0bSAndroid Build Coastguard Worker       printf("Pretty sure that is a one!\n");
67*08b48e0bSAndroid Build Coastguard Worker     else
68*08b48e0bSAndroid Build Coastguard Worker       printf("Neither one or zero? How quaint!\n");
69*08b48e0bSAndroid Build Coastguard Worker 
70*08b48e0bSAndroid Build Coastguard Worker   }
71*08b48e0bSAndroid Build Coastguard Worker 
72*08b48e0bSAndroid Build Coastguard Worker   return 0;
73*08b48e0bSAndroid Build Coastguard Worker 
74*08b48e0bSAndroid Build Coastguard Worker }
75*08b48e0bSAndroid Build Coastguard Worker 
76