//===-- strlen_fuzz.cpp ---------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// Fuzzing test for llvm-libc strlen implementation. /// //===----------------------------------------------------------------------===// #include "src/string/strlen.h" #include #include // always null terminate the data extern "C" size_t LLVMFuzzerMutate(uint8_t *data, size_t size, size_t max_size); extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *data, size_t size, size_t max_size, unsigned int seed) { size = LLVMFuzzerMutate(data, size, max_size); data[size - 1] = '\0'; return size; } extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { size_t ref = ::strlen(reinterpret_cast(data)); size_t impl = LIBC_NAMESPACE::strlen(reinterpret_cast(data)); if (ref != impl) __builtin_trap(); return 0; }