Skip to content

Commit fa13f34

Browse files
author
MarcoFalke
committed
fuzz: Increase branch coverage of the float fuzz target
1 parent fad0c58 commit fa13f34

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/test/fuzz/float.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <memusage.h>
66
#include <test/fuzz/FuzzedDataProvider.h>
77
#include <test/fuzz/fuzz.h>
8+
#include <test/fuzz/util.h>
89
#include <util/serfloat.h>
910
#include <version.h>
1011

@@ -17,7 +18,33 @@ FUZZ_TARGET(float)
1718
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
1819

1920
{
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+
}()};
2148
(void)memusage::DynamicUsage(d);
2249

2350
uint64_t encoded = EncodeDouble(d);

0 commit comments

Comments
 (0)