5
5
#include < memusage.h>
6
6
#include < test/fuzz/FuzzedDataProvider.h>
7
7
#include < test/fuzz/fuzz.h>
8
+ #include < test/fuzz/util.h>
8
9
#include < util/serfloat.h>
9
10
#include < version.h>
10
11
@@ -17,7 +18,33 @@ FUZZ_TARGET(float)
17
18
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
18
19
19
20
{
20
- const double d = fuzzed_data_provider.ConsumeFloatingPoint <double >();
21
+ const double d{[&] {
22
+ double tmp;
23
+ CallOneOf (
24
+ fuzzed_data_provider,
25
+ // an actual number
26
+ [&] { tmp = fuzzed_data_provider.ConsumeFloatingPoint <double >(); },
27
+ // special numbers and NANs
28
+ [&] { tmp = fuzzed_data_provider.PickValueInArray ({
29
+ std::numeric_limits<double >::infinity (),
30
+ -std::numeric_limits<double >::infinity (),
31
+ std::numeric_limits<double >::min (),
32
+ -std::numeric_limits<double >::min (),
33
+ std::numeric_limits<double >::max (),
34
+ -std::numeric_limits<double >::max (),
35
+ std::numeric_limits<double >::lowest (),
36
+ -std::numeric_limits<double >::lowest (),
37
+ std::numeric_limits<double >::quiet_NaN (),
38
+ -std::numeric_limits<double >::quiet_NaN (),
39
+ std::numeric_limits<double >::signaling_NaN (),
40
+ -std::numeric_limits<double >::signaling_NaN (),
41
+ std::numeric_limits<double >::denorm_min (),
42
+ -std::numeric_limits<double >::denorm_min (),
43
+ }); },
44
+ // Anything from raw memory (also checks that DecodeDouble doesn't crash on any input)
45
+ [&] { tmp = DecodeDouble (fuzzed_data_provider.ConsumeIntegral <uint64_t >()); });
46
+ return tmp;
47
+ }()};
21
48
(void )memusage::DynamicUsage (d);
22
49
23
50
uint64_t encoded = EncodeDouble (d);
0 commit comments