brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · dd72c19 Raw
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