Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
fuzz
netaddress.cpp
Go to the documentation of this file.
1
// Copyright (c) 2020-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
netaddress.h
>
6
#include <
test/fuzz/FuzzedDataProvider.h
>
7
#include <
test/fuzz/fuzz.h
>
8
#include <
test/fuzz/util/net.h
>
9
#include <
test/util/random.h
>
10
11
#include <cassert>
12
#include <cstdint>
13
#include <vector>
14
15
FUZZ_TARGET
(netaddress)
16
{
17
SeedRandomStateForTest
(
SeedRand::ZEROS
);
18
FuzzedDataProvider
fuzzed_data_provider(buffer.data(), buffer.size());
19
20
const
CNetAddr
net_addr =
ConsumeNetAddr
(fuzzed_data_provider);
21
(void)net_addr.
GetNetClass
();
22
if
(net_addr.
GetNetwork
() ==
Network::NET_IPV4
) {
23
assert
(net_addr.
IsIPv4
());
24
}
25
if
(net_addr.
GetNetwork
() ==
Network::NET_IPV6
) {
26
assert
(net_addr.
IsIPv6
());
27
}
28
if
(net_addr.
GetNetwork
() ==
Network::NET_ONION
) {
29
assert
(net_addr.
IsTor
());
30
}
31
if
(net_addr.
GetNetwork
() ==
Network::NET_I2P
) {
32
assert
(net_addr.
IsI2P
());
33
}
34
if
(net_addr.
GetNetwork
() ==
Network::NET_CJDNS
) {
35
assert
(net_addr.
IsCJDNS
());
36
}
37
if
(net_addr.
GetNetwork
() ==
Network::NET_INTERNAL
) {
38
assert
(net_addr.
IsInternal
());
39
}
40
if
(net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
) {
41
assert
(!net_addr.
IsRoutable
());
42
}
43
(void)net_addr.
IsBindAny
();
44
if
(net_addr.
IsInternal
()) {
45
assert
(net_addr.
GetNetwork
() ==
Network::NET_INTERNAL
);
46
}
47
if
(net_addr.
IsIPv4
()) {
48
assert
(net_addr.
GetNetwork
() ==
Network::NET_IPV4
|| net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
);
49
}
50
if
(net_addr.
IsIPv6
()) {
51
assert
(net_addr.
GetNetwork
() ==
Network::NET_IPV6
|| net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
);
52
}
53
(void)net_addr.
IsLocal
();
54
if
(net_addr.
IsRFC1918
() || net_addr.
IsRFC2544
() || net_addr.
IsRFC6598
() || net_addr.
IsRFC5737
() || net_addr.
IsRFC3927
()) {
55
assert
(net_addr.
IsIPv4
());
56
}
57
(void)net_addr.
IsRFC2544
();
58
if
(net_addr.
IsRFC3849
() || net_addr.
IsRFC3964
() || net_addr.
IsRFC4380
() || net_addr.
IsRFC4843
() || net_addr.
IsRFC7343
() || net_addr.
IsRFC4862
() || net_addr.
IsRFC6052
() || net_addr.
IsRFC6145
()) {
59
assert
(net_addr.
IsIPv6
());
60
}
61
(void)net_addr.
IsRFC3927
();
62
(void)net_addr.
IsRFC3964
();
63
if
(net_addr.
IsRFC4193
()) {
64
assert
(net_addr.
GetNetwork
() ==
Network::NET_INTERNAL
|| net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
);
65
}
66
(void)net_addr.
IsRFC4380
();
67
(void)net_addr.
IsRFC4843
();
68
(void)net_addr.
IsRFC4862
();
69
(void)net_addr.
IsRFC5737
();
70
(void)net_addr.
IsRFC6052
();
71
(void)net_addr.
IsRFC6145
();
72
(void)net_addr.
IsRFC6598
();
73
(void)net_addr.
IsRFC7343
();
74
if
(!net_addr.
IsRoutable
()) {
75
assert
(net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
|| net_addr.
GetNetwork
() ==
Network::NET_INTERNAL
);
76
}
77
if
(net_addr.
IsTor
()) {
78
assert
(net_addr.
GetNetwork
() ==
Network::NET_ONION
);
79
}
80
if
(net_addr.
IsI2P
()) {
81
assert
(net_addr.
GetNetwork
() ==
Network::NET_I2P
);
82
}
83
if
(net_addr.
IsCJDNS
()) {
84
assert
(net_addr.
GetNetwork
() ==
Network::NET_CJDNS
);
85
}
86
(void)net_addr.
IsValid
();
87
(void)net_addr.
ToStringAddr
();
88
89
const
CSubNet
sub_net{net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint8_t>()};
90
(void)sub_net.
IsValid
();
91
(void)sub_net.
ToString
();
92
93
const
CService
service{net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint16_t>()};
94
(void)service.
GetKey
();
95
(void)service.
GetPort
();
96
(void)service.
ToStringAddrPort
();
97
(void)
CServiceHash
()(service);
98
(void)
CServiceHash
(0, 0)(service);
99
100
const
CNetAddr
other_net_addr =
ConsumeNetAddr
(fuzzed_data_provider);
101
(void)net_addr.
GetReachabilityFrom
(other_net_addr);
102
(void)sub_net.
Match
(other_net_addr);
103
104
const
CService
other_service{fuzzed_data_provider.
ConsumeBool
() ? net_addr : other_net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint16_t>()};
105
assert
((service == other_service) != (service != other_service));
106
(void)(service < other_service);
107
108
if
(service.
ToStringAddrPort
() == other_service.
ToStringAddrPort
()) {
109
assert
(
static_cast<
CNetAddr
>
(service) ==
static_cast<
CNetAddr
>
(other_service));
110
}
111
112
const
CSubNet
sub_net_copy_1{net_addr, other_net_addr};
113
const
CSubNet
sub_net_copy_2{net_addr};
114
115
CNetAddr
mutable_net_addr;
116
mutable_net_addr.
SetIP
(net_addr);
117
assert
(net_addr == mutable_net_addr);
118
}
FuzzedDataProvider.h
CNetAddr
Network address.
Definition
netaddress.h:113
CNetAddr::GetNetClass
Network GetNetClass() const
Definition
netaddress.cpp:674
CNetAddr::ToStringAddr
std::string ToStringAddr() const
Definition
netaddress.cpp:580
CNetAddr::IsBindAny
bool IsBindAny() const
Definition
netaddress.cpp:303
CNetAddr::IsRFC6052
bool IsRFC6052() const
Definition
netaddress.cpp:351
CNetAddr::SetIP
void SetIP(const CNetAddr &ip)
Definition
netaddress.cpp:107
CNetAddr::IsRFC7343
bool IsRFC7343() const
Definition
netaddress.cpp:387
CNetAddr::IsCJDNS
bool IsCJDNS() const
Definition
netaddress.h:177
CNetAddr::IsTor
bool IsTor() const
Definition
netaddress.h:175
CNetAddr::IsRoutable
bool IsRoutable() const
Definition
netaddress.cpp:462
CNetAddr::IsRFC5737
bool IsRFC5737() const
Definition
netaddress.cpp:334
CNetAddr::IsRFC6598
bool IsRFC6598() const
Definition
netaddress.cpp:329
CNetAddr::IsRFC1918
bool IsRFC1918() const
Definition
netaddress.cpp:311
CNetAddr::IsValid
bool IsValid() const
Definition
netaddress.cpp:424
CNetAddr::IsIPv4
bool IsIPv4() const
Definition
netaddress.h:158
CNetAddr::IsRFC3849
bool IsRFC3849() const
Definition
netaddress.cpp:341
CNetAddr::IsLocal
bool IsLocal() const
Definition
netaddress.cpp:398
CNetAddr::IsIPv6
bool IsIPv6() const
Definition
netaddress.h:159
CNetAddr::IsInternal
bool IsInternal() const
Definition
netaddress.cpp:472
CNetAddr::IsRFC4193
bool IsRFC4193() const
Definition
netaddress.cpp:369
CNetAddr::IsRFC2544
bool IsRFC2544() const
Definition
netaddress.cpp:319
CNetAddr::GetNetwork
enum Network GetNetwork() const
Definition
netaddress.cpp:496
CNetAddr::IsRFC6145
bool IsRFC6145() const
Definition
netaddress.cpp:374
CNetAddr::GetReachabilityFrom
int GetReachabilityFrom(const CNetAddr &paddrPartner) const
Calculates a metric for how reachable (*this) is from a given partner.
Definition
netaddress.cpp:713
CNetAddr::IsRFC3964
bool IsRFC3964() const
Definition
netaddress.cpp:346
CNetAddr::IsRFC4380
bool IsRFC4380() const
Definition
netaddress.cpp:358
CNetAddr::IsRFC3927
bool IsRFC3927() const
Definition
netaddress.cpp:324
CNetAddr::IsRFC4862
bool IsRFC4862() const
Definition
netaddress.cpp:363
CNetAddr::IsRFC4843
bool IsRFC4843() const
Definition
netaddress.cpp:381
CNetAddr::IsI2P
bool IsI2P() const
Definition
netaddress.h:176
CServiceHash
Definition
netaddress.h:572
CService
A combination of a network address (CNetAddr) and a (TCP) port.
Definition
netaddress.h:530
CService::GetPort
uint16_t GetPort() const
Definition
netaddress.cpp:835
CService::ToStringAddrPort
std::string ToStringAddrPort() const
Definition
netaddress.cpp:903
CService::GetKey
std::vector< unsigned char > GetKey() const
Definition
netaddress.cpp:895
CSubNet
Definition
netaddress.h:480
CSubNet::ToString
std::string ToString() const
Definition
netaddress.cpp:1047
CSubNet::IsValid
bool IsValid() const
Definition
netaddress.cpp:1080
CSubNet::Match
bool Match(const CNetAddr &addr) const
Definition
netaddress.cpp:1019
FuzzedDataProvider
Definition
FuzzedDataProvider.h:32
FuzzedDataProvider::ConsumeBool
bool ConsumeBool()
Definition
FuzzedDataProvider.h:289
FuzzedDataProvider::ConsumeIntegral
T ConsumeIntegral()
Definition
FuzzedDataProvider.h:195
fuzz.h
FUZZ_TARGET
#define FUZZ_TARGET(...)
Definition
fuzz.h:35
netaddress.h
NET_I2P
@ NET_I2P
I2P.
Definition
netaddress.h:47
NET_CJDNS
@ NET_CJDNS
CJDNS.
Definition
netaddress.h:50
NET_ONION
@ NET_ONION
TOR (v2 or v3).
Definition
netaddress.h:44
NET_IPV6
@ NET_IPV6
IPv6.
Definition
netaddress.h:41
NET_IPV4
@ NET_IPV4
IPv4.
Definition
netaddress.h:38
NET_UNROUTABLE
@ NET_UNROUTABLE
Addresses from these networks are not publicly routable on the global Internet.
Definition
netaddress.h:35
NET_INTERNAL
@ NET_INTERNAL
A set of addresses that represent the hash of a string or FQDN.
Definition
netaddress.h:54
ConsumeNetAddr
CNetAddr ConsumeNetAddr(FuzzedDataProvider &fuzzed_data_provider, FastRandomContext *rand) noexcept
Create a CNetAddr.
Definition
net.cpp:29
net.h
SeedRandomStateForTest
void SeedRandomStateForTest(SeedRand seedtype)
Seed the global RNG state for testing and log the seed value.
Definition
random.cpp:19
random.h
SeedRand::ZEROS
@ ZEROS
Seed with a compile time constant of zeros.
Definition
random.h:19
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.17.0