33 lines · cpp
1//===-- strlen_fuzz.cpp ---------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8///9/// Fuzzing test for llvm-libc strlen implementation.10///11//===----------------------------------------------------------------------===//12 13#include "src/string/strlen.h"14#include <cstdint>15#include <cstring>16 17// always null terminate the data18extern "C" size_t LLVMFuzzerMutate(uint8_t *data, size_t size, size_t max_size);19extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *data, size_t size,20 size_t max_size, unsigned int seed) {21 size = LLVMFuzzerMutate(data, size, max_size);22 data[size - 1] = '\0';23 return size;24}25 26extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {27 size_t ref = ::strlen(reinterpret_cast<const char *>(data));28 size_t impl = LIBC_NAMESPACE::strlen(reinterpret_cast<const char *>(data));29 if (ref != impl)30 __builtin_trap();31 return 0;32}33