| //===-- 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 <stdint.h> | |
| #include <string.h> | |
| // 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<const char *>(data)); | |
| size_t impl = LIBC_NAMESPACE::strlen(reinterpret_cast<const char *>(data)); | |
| if (ref != impl) | |
| __builtin_trap(); | |
| return 0; | |
| } |