1 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2 // See https://llvm.org/LICENSE.txt for license information.
3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4 
5 // Simple test for a fuzzer. The fuzzer must find the string "Hi!".
6 #include <cstddef>
7 #include <cstdint>
8 #include <cstdlib>
9 #include <iostream>
10 
11 extern "C" {
12 __attribute__((noinline))
FunctionC(const uint8_t * Data,size_t Size)13 void FunctionC(const uint8_t *Data, size_t Size) {
14   if (Size > 3 && Data[3] == 'Z') {
15     static bool PrintedOnce = false;
16     if (!PrintedOnce) {
17       std::cout << "BINGO\n";
18       PrintedOnce = true;
19     }
20   }
21 }
22 
23 __attribute__((noinline))
FunctionB(const uint8_t * Data,size_t Size)24 void FunctionB(const uint8_t *Data, size_t Size) {
25   if (Size > 2 && Data[2] == 'Z')
26     FunctionC(Data, Size);
27 }
28 __attribute__((noinline))
FunctionA(const uint8_t * Data,size_t Size)29 void FunctionA(const uint8_t *Data, size_t Size) {
30   if (Size > 1 && Data[1] == 'U')
31     FunctionB(Data, Size);
32 }
33 }
34 
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)35 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
36   if (Size > 0 && Data[0] == 'F')
37     FunctionA(Data, Size);
38   return 0;
39 }
40 
41