Skip to content

Commit deba199

Browse files
tests: Add ConsumeSubNet(...). Move and increase coverage in ConsumeNetAddr(...).
1 parent abdfd2d commit deba199

File tree

2 files changed

+29
-29
lines changed

2 files changed

+29
-29
lines changed

src/test/fuzz/netaddress.cpp

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,13 @@
55
#include <netaddress.h>
66
#include <test/fuzz/FuzzedDataProvider.h>
77
#include <test/fuzz/fuzz.h>
8+
#include <test/fuzz/util.h>
89

910
#include <cassert>
1011
#include <cstdint>
1112
#include <netinet/in.h>
1213
#include <vector>
1314

14-
namespace {
15-
CNetAddr ConsumeNetAddr(FuzzedDataProvider& fuzzed_data_provider) noexcept
16-
{
17-
const Network network = fuzzed_data_provider.PickValueInArray({Network::NET_IPV4, Network::NET_IPV6, Network::NET_INTERNAL, Network::NET_ONION});
18-
if (network == Network::NET_IPV4) {
19-
const in_addr v4_addr = {
20-
.s_addr = fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
21-
return CNetAddr{v4_addr};
22-
} else if (network == Network::NET_IPV6) {
23-
if (fuzzed_data_provider.remaining_bytes() < 16) {
24-
return CNetAddr{};
25-
}
26-
in6_addr v6_addr = {};
27-
memcpy(v6_addr.s6_addr, fuzzed_data_provider.ConsumeBytes<uint8_t>(16).data(), 16);
28-
return CNetAddr{v6_addr, fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
29-
} else if (network == Network::NET_INTERNAL) {
30-
CNetAddr net_addr;
31-
net_addr.SetInternal(fuzzed_data_provider.ConsumeBytesAsString(32));
32-
return net_addr;
33-
} else if (network == Network::NET_ONION) {
34-
CNetAddr net_addr;
35-
net_addr.SetSpecial(fuzzed_data_provider.ConsumeBytesAsString(32));
36-
return net_addr;
37-
} else {
38-
assert(false);
39-
}
40-
}
41-
}; // namespace
42-
4315
void test_one_input(const std::vector<uint8_t>& buffer)
4416
{
4517
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());

src/test/fuzz/util.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <attributes.h>
1111
#include <coins.h>
1212
#include <consensus/consensus.h>
13+
#include <netaddress.h>
1314
#include <primitives/transaction.h>
1415
#include <script/script.h>
1516
#include <script/standard.h>
@@ -228,4 +229,31 @@ NODISCARD inline std::vector<uint8_t> ConsumeFixedLengthByteVector(FuzzedDataPro
228229
return result;
229230
}
230231

232+
CNetAddr ConsumeNetAddr(FuzzedDataProvider& fuzzed_data_provider) noexcept
233+
{
234+
const Network network = fuzzed_data_provider.PickValueInArray({Network::NET_IPV4, Network::NET_IPV6, Network::NET_INTERNAL, Network::NET_ONION});
235+
CNetAddr net_addr;
236+
if (network == Network::NET_IPV4) {
237+
const in_addr v4_addr = {
238+
.s_addr = fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
239+
net_addr = CNetAddr{v4_addr};
240+
} else if (network == Network::NET_IPV6) {
241+
if (fuzzed_data_provider.remaining_bytes() >= 16) {
242+
in6_addr v6_addr = {};
243+
memcpy(v6_addr.s6_addr, fuzzed_data_provider.ConsumeBytes<uint8_t>(16).data(), 16);
244+
net_addr = CNetAddr{v6_addr, fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
245+
}
246+
} else if (network == Network::NET_INTERNAL) {
247+
net_addr.SetInternal(fuzzed_data_provider.ConsumeBytesAsString(32));
248+
} else if (network == Network::NET_ONION) {
249+
net_addr.SetSpecial(fuzzed_data_provider.ConsumeBytesAsString(32));
250+
}
251+
return net_addr;
252+
}
253+
254+
CSubNet ConsumeSubNet(FuzzedDataProvider& fuzzed_data_provider) noexcept
255+
{
256+
return {ConsumeNetAddr(fuzzed_data_provider), fuzzed_data_provider.ConsumeIntegral<int32_t>()};
257+
}
258+
231259
#endif // BITCOIN_TEST_FUZZ_UTIL_H

0 commit comments

Comments
 (0)