13db6ad2bSVitaly Buka // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
23db6ad2bSVitaly Buka // See https://llvm.org/LICENSE.txt for license information.
33db6ad2bSVitaly Buka // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
43db6ad2bSVitaly Buka
53db6ad2bSVitaly Buka // Test that fuzzer we can reload artifacts with any bytes inside.
63db6ad2bSVitaly Buka #include <algorithm>
73db6ad2bSVitaly Buka #include <cstdint>
8*91cee68eSAdhemerval Zanella #include <cstdlib>
93db6ad2bSVitaly Buka #include <numeric>
103db6ad2bSVitaly Buka #include <set>
113db6ad2bSVitaly Buka
LLVMFuzzerCustomMutator(uint8_t * Data,size_t Size,size_t MaxSize,unsigned int Seed)123db6ad2bSVitaly Buka extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,
133db6ad2bSVitaly Buka size_t MaxSize, unsigned int Seed) {
143db6ad2bSVitaly Buka std::srand(Seed);
153db6ad2bSVitaly Buka std::generate(Data, Data + MaxSize, std::rand);
163db6ad2bSVitaly Buka return MaxSize;
173db6ad2bSVitaly Buka }
183db6ad2bSVitaly Buka
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)193db6ad2bSVitaly Buka extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
203db6ad2bSVitaly Buka if (Size > 5000 && std::set<uint8_t>(Data, Data + Size).size() > 255 &&
213db6ad2bSVitaly Buka (uint8_t)std::accumulate(Data, Data + Size, uint8_t(Size)) == 0)
22*91cee68eSAdhemerval Zanella abort();
233db6ad2bSVitaly Buka return 0;
243db6ad2bSVitaly Buka }
25