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
5 // Simple test for a fuzzer. The fuzzer must find the interesting switch value.
12 static volatile int Sink
;
15 bool Switch(const uint8_t *Data
, size_t Size
) {
17 if (Size
< sizeof(X
)) return false;
18 memcpy(&X
, Data
, sizeof(X
));
20 case 1: Sink
= __LINE__
; break;
21 case 101: Sink
= __LINE__
; break;
22 case 1001: Sink
= __LINE__
; break;
23 case 10001: Sink
= __LINE__
; break;
24 case 100001: Sink
= __LINE__
; break;
25 case 1000001: Sink
= __LINE__
; break;
26 case 10000001: Sink
= __LINE__
; break;
27 case 100000001: return true;
32 bool ShortSwitch(const uint8_t *Data
, size_t Size
) {
34 if (Size
< sizeof(short)) return false;
35 memcpy(&X
, Data
, sizeof(short));
37 case 42: Sink
= __LINE__
; break;
38 case 402: Sink
= __LINE__
; break;
39 case 4002: Sink
= __LINE__
; break;
40 case 5002: Sink
= __LINE__
; break;
41 case 7002: Sink
= __LINE__
; break;
42 case 9002: Sink
= __LINE__
; break;
43 case 14002: Sink
= __LINE__
; break;
44 case 21402: return true;
49 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data
, size_t Size
) {
50 if (Size
>= 4 && Switch
<int>(Data
, Size
) &&
51 Size
>= 12 && Switch
<uint64_t>(Data
+ 4, Size
- 4) &&
52 Size
>= 14 && ShortSwitch(Data
+ 12, 2)
54 fprintf(stderr
, "BINGO; Found the target, exiting\n");