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