1*d9bbad27SSiva Chandra Reddy //===-- atof_fuzz.cpp -----------------------------------------------------===//
2*d9bbad27SSiva Chandra Reddy //
3*d9bbad27SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*d9bbad27SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*d9bbad27SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*d9bbad27SSiva Chandra Reddy //
7*d9bbad27SSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*d9bbad27SSiva Chandra Reddy ///
9*d9bbad27SSiva Chandra Reddy /// Fuzzing test for llvm-libc atof implementation.
10*d9bbad27SSiva Chandra Reddy ///
11*d9bbad27SSiva Chandra Reddy //===----------------------------------------------------------------------===//
12*d9bbad27SSiva Chandra Reddy #include "src/stdlib/atof.h"
13*d9bbad27SSiva Chandra Reddy #include <stddef.h>
14*d9bbad27SSiva Chandra Reddy #include <stdint.h>
15*d9bbad27SSiva Chandra Reddy #include <stdlib.h>
16*d9bbad27SSiva Chandra Reddy 
17*d9bbad27SSiva Chandra Reddy #include "fuzzing/stdlib/StringParserOutputDiff.h"
18*d9bbad27SSiva Chandra Reddy 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)19*d9bbad27SSiva Chandra Reddy extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
20*d9bbad27SSiva Chandra Reddy   uint8_t *container = new uint8_t[size + 1];
21*d9bbad27SSiva Chandra Reddy   if (!container)
22*d9bbad27SSiva Chandra Reddy     __builtin_trap();
23*d9bbad27SSiva Chandra Reddy   size_t i;
24*d9bbad27SSiva Chandra Reddy 
25*d9bbad27SSiva Chandra Reddy   for (i = 0; i < size; ++i)
26*d9bbad27SSiva Chandra Reddy     container[i] = data[i];
27*d9bbad27SSiva Chandra Reddy   container[size] = '\0'; // Add null terminator to container.
28*d9bbad27SSiva Chandra Reddy 
29*d9bbad27SSiva Chandra Reddy   StringParserOutputDiff<double>(&__llvm_libc::atof, &::atof, container, size);
30*d9bbad27SSiva Chandra Reddy   delete[] container;
31*d9bbad27SSiva Chandra Reddy   return 0;
32*d9bbad27SSiva Chandra Reddy }
33