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