1*b4bd1943SLouis Dionne //===----------------------------------------------------------------------===// 2*b4bd1943SLouis Dionne // 3*b4bd1943SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*b4bd1943SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*b4bd1943SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*b4bd1943SLouis Dionne // 7*b4bd1943SLouis Dionne //===----------------------------------------------------------------------===// 8*b4bd1943SLouis Dionne 9*b4bd1943SLouis Dionne // UNSUPPORTED: c++03, c++11 10*b4bd1943SLouis Dionne 11*b4bd1943SLouis Dionne #include <algorithm> 12*b4bd1943SLouis Dionne #include <cstddef> 13*b4bd1943SLouis Dionne #include <cstdint> 14*b4bd1943SLouis Dionne #include <vector> 15*b4bd1943SLouis Dionne 16*b4bd1943SLouis Dionne #include "fuzz.h" 17*b4bd1943SLouis Dionne LLVMFuzzerTestOneInput(const std::uint8_t * data,std::size_t size)18*b4bd1943SLouis Dionneextern "C" int LLVMFuzzerTestOneInput(const std::uint8_t *data, std::size_t size) { 19*b4bd1943SLouis Dionne if (size < 2) 20*b4bd1943SLouis Dionne return 0; 21*b4bd1943SLouis Dionne std::vector<std::uint8_t> working(data, data + size); 22*b4bd1943SLouis Dionne std::make_heap(working.begin(), working.end()); 23*b4bd1943SLouis Dionne 24*b4bd1943SLouis Dionne // Pop things off, one at a time 25*b4bd1943SLouis Dionne auto iter = --working.end(); 26*b4bd1943SLouis Dionne while (iter != working.begin()) { 27*b4bd1943SLouis Dionne std::pop_heap(working.begin(), iter); 28*b4bd1943SLouis Dionne if (!std::is_heap(working.begin(), --iter)) 29*b4bd1943SLouis Dionne return 2; 30*b4bd1943SLouis Dionne } 31*b4bd1943SLouis Dionne 32*b4bd1943SLouis Dionne return 0; 33*b4bd1943SLouis Dionne } 34