1*10ab2aceSGeorge Karpenkov // This file is distributed under the University of Illinois Open Source 2*10ab2aceSGeorge Karpenkov // License. See LICENSE.TXT for details. 3*10ab2aceSGeorge Karpenkov 4*10ab2aceSGeorge Karpenkov // Threaded test for a fuzzer. The fuzzer should find "H" 5*10ab2aceSGeorge Karpenkov #include <assert.h> 6*10ab2aceSGeorge Karpenkov #include <cstddef> 7*10ab2aceSGeorge Karpenkov #include <cstdint> 8*10ab2aceSGeorge Karpenkov #include <cstring> 9*10ab2aceSGeorge Karpenkov #include <iostream> 10*10ab2aceSGeorge Karpenkov #include <ostream> 11*10ab2aceSGeorge Karpenkov #include <thread> 12*10ab2aceSGeorge Karpenkov 13*10ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { 14*10ab2aceSGeorge Karpenkov auto C = [&] { 15*10ab2aceSGeorge Karpenkov if (Size >= 2 && Data[0] == 'H') { 16*10ab2aceSGeorge Karpenkov std::cout << "BINGO; Found the target, exiting\n" << std::flush; 17*10ab2aceSGeorge Karpenkov abort(); 18*10ab2aceSGeorge Karpenkov } 19*10ab2aceSGeorge Karpenkov }; 20*10ab2aceSGeorge Karpenkov std::thread T[] = {std::thread(C), std::thread(C), std::thread(C), 21*10ab2aceSGeorge Karpenkov std::thread(C), std::thread(C), std::thread(C)}; 22*10ab2aceSGeorge Karpenkov for (auto &X : T) 23*10ab2aceSGeorge Karpenkov X.join(); 24*10ab2aceSGeorge Karpenkov return 0; 25*10ab2aceSGeorge Karpenkov } 26*10ab2aceSGeorge Karpenkov 27