/src/fast_float/fuzz/from_chars.cc
Line | Count | Source (jump to first uncovered line) |
1 | | #include "fast_float/fast_float.h" |
2 | | #include <fuzzer/FuzzedDataProvider.h> |
3 | | #include <string> |
4 | | #include <system_error> |
5 | | |
6 | 5.49k | fast_float::chars_format arbitrary_format(FuzzedDataProvider &fdp) { |
7 | 5.49k | using fast_float::chars_format; |
8 | 5.49k | switch (fdp.ConsumeIntegralInRange<int>(0, 3)) { |
9 | 1.38k | case 0: |
10 | 1.38k | return chars_format::scientific; |
11 | 0 | break; |
12 | 1.17k | case 1: |
13 | 1.17k | return chars_format::fixed; |
14 | 0 | break; |
15 | 927 | case 2: |
16 | 927 | return chars_format::fixed; |
17 | 0 | break; |
18 | 5.49k | } |
19 | 2.00k | return chars_format::general; |
20 | 5.49k | } |
21 | | |
22 | 5.49k | extern "C" int LLVMFuzzerTestOneInput(uint8_t const *data, size_t size) { |
23 | 5.49k | FuzzedDataProvider fdp(data, size); |
24 | 5.49k | fast_float::chars_format format = arbitrary_format(fdp); |
25 | 5.49k | double result_d = 0.0; |
26 | 5.49k | std::string input_d = fdp.ConsumeRandomLengthString(128); |
27 | 5.49k | auto answer = fast_float::from_chars( |
28 | 5.49k | input_d.data(), input_d.data() + input_d.size(), result_d, format); |
29 | 5.49k | std::string input_f = fdp.ConsumeRandomLengthString(128); |
30 | 5.49k | float result_f = 0.0; |
31 | 5.49k | answer = fast_float::from_chars( |
32 | 5.49k | input_f.data(), input_f.data() + input_f.size(), result_f, format); |
33 | 5.49k | int result_i = 0; |
34 | 5.49k | std::string input_i = fdp.ConsumeRandomLengthString(128); |
35 | 5.49k | answer = fast_float::from_chars(input_i.data(), |
36 | 5.49k | input_i.data() + input_i.size(), result_i); |
37 | 5.49k | return 0; |
38 | 5.49k | } |