1*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
3*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
410ab2aceSGeorge Karpenkov
510ab2aceSGeorge Karpenkov // Test strstr and strcasestr hooks.
610ab2aceSGeorge Karpenkov #include <cstdint>
710ab2aceSGeorge Karpenkov #include <cstdio>
810ab2aceSGeorge Karpenkov #include <cstdlib>
910ab2aceSGeorge Karpenkov #include <string.h>
1010ab2aceSGeorge Karpenkov #include <string>
1110ab2aceSGeorge Karpenkov
1210ab2aceSGeorge Karpenkov // Windows does not have strcasestr and memmem, so we are not testing them.
1310ab2aceSGeorge Karpenkov #ifdef _WIN32
1410ab2aceSGeorge Karpenkov #define strcasestr strstr
1510ab2aceSGeorge Karpenkov #define memmem(a, b, c, d) true
1610ab2aceSGeorge Karpenkov #endif
1710ab2aceSGeorge Karpenkov
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)1810ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
1910ab2aceSGeorge Karpenkov if (Size < 4) return 0;
2010ab2aceSGeorge Karpenkov std::string s(reinterpret_cast<const char*>(Data), Size);
2110ab2aceSGeorge Karpenkov if (strstr(s.c_str(), "FUZZ") &&
2210ab2aceSGeorge Karpenkov strcasestr(s.c_str(), "aBcD") &&
2310ab2aceSGeorge Karpenkov memmem(s.data(), s.size(), "kuku", 4)
2410ab2aceSGeorge Karpenkov ) {
2510ab2aceSGeorge Karpenkov fprintf(stderr, "BINGO\n");
2610ab2aceSGeorge Karpenkov exit(1);
2710ab2aceSGeorge Karpenkov }
2810ab2aceSGeorge Karpenkov return 0;
2910ab2aceSGeorge Karpenkov }
30