Coverage Report

Created: 2025-08-29 06:13

/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
}