1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03, c++11
10
11#include <algorithm>
12#include <cassert>
13#include <cstddef>
14#include <cstdint>
15#include <limits>
16
17#include "fuzz.h"
18
19extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t *data, std::size_t size) {
20 if (size < 2)
21 return 0;
22
23 const std::size_t pat_size = data[0] * (size - 1) / std::numeric_limits<uint8_t>::max();
24 assert(pat_size <= size - 1);
25 const std::uint8_t *pat_begin = data + 1;
26 const std::uint8_t *pat_end = pat_begin + pat_size;
27 const std::uint8_t *data_end = data + size;
28 assert(pat_end <= data_end);
29
30 auto it = std::search(first1: pat_end, last1: data_end, first2: pat_begin, last2: pat_end);
31 if (it != data_end) // not found
32 if (!std::equal(first1: pat_begin, last1: pat_end, first2: it))
33 return 1;
34 return 0;
35}
36

source code of libcxx/test/libcxx/fuzzing/search.pass.cpp