Bitcoin Core
32.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
() || net_addr.
IsRFC9637
()) {
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
(void)net_addr.
IsRFC9637
();
75
const
bool
routable{net_addr.
IsRoutable
()};
76
if
(!routable) {
77
assert
(net_addr.
GetNetwork
() ==
Network::NET_UNROUTABLE
|| net_addr.
GetNetwork
() ==
Network::NET_INTERNAL
);
78
}
79
if
(net_addr.
IsTor
()) {
80
assert
(net_addr.
GetNetwork
() ==
Network::NET_ONION
);
81
}
82
if
(net_addr.
IsI2P
()) {
83
assert
(net_addr.
GetNetwork
() ==
Network::NET_I2P
);
84
}
85
if
(net_addr.
IsCJDNS
()) {
86
assert
(net_addr.
GetNetwork
() ==
Network::NET_CJDNS
);
87
}
88
if
(!net_addr.
IsValid
()) {
89
assert
(!routable);
90
}
91
(void)net_addr.
ToStringAddr
();
92
93
const
CSubNet
sub_net{net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint8_t>()};
94
(void)sub_net.
IsValid
();
95
(void)sub_net.
ToString
();
96
97
const
CService
service{net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint16_t>()};
98
(void)service.
GetKey
();
99
(void)service.
GetPort
();
100
(void)service.
ToStringAddrPort
();
101
(void)
CServiceHash
()(service);
102
(void)
CServiceHash
(0, 0)(service);
103
104
const
CNetAddr
other_net_addr =
ConsumeNetAddr
(fuzzed_data_provider);
105
(void)net_addr.
GetReachabilityFrom
(other_net_addr);
106
(void)sub_net.
Match
(other_net_addr);
107
108
const
CService
other_service{fuzzed_data_provider.
ConsumeBool
() ? net_addr : other_net_addr, fuzzed_data_provider.
ConsumeIntegral
<uint16_t>()};
109
assert
((service == other_service) != (service != other_service));
110
(void)(service < other_service);
111
112
if
(service.
ToStringAddrPort
() == other_service.
ToStringAddrPort
()) {
113
assert
(
static_cast<
CNetAddr
>
(service) ==
static_cast<
CNetAddr
>
(other_service));
114
}
115
116
const
CSubNet
sub_net_copy_1{net_addr, other_net_addr};
117
const
CSubNet
sub_net_copy_2{net_addr};
118
119
CNetAddr
mutable_net_addr;
120
mutable_net_addr.
SetIP
(net_addr);
121
assert
(net_addr == mutable_net_addr);
122
}
FuzzedDataProvider.h
CNetAddr
Network address.
Definition
netaddress.h:113
CNetAddr::GetNetClass
Network GetNetClass() const
Definition
netaddress.cpp:680
CNetAddr::ToStringAddr
std::string ToStringAddr() const
Definition
netaddress.cpp:586
CNetAddr::IsBindAny
bool IsBindAny() const
Definition
netaddress.cpp:303
CNetAddr::IsRFC6052
bool IsRFC6052() const
Definition
netaddress.cpp:357
CNetAddr::SetIP
void SetIP(const CNetAddr &ip)
Definition
netaddress.cpp:107
CNetAddr::IsRFC7343
bool IsRFC7343() const
Definition
netaddress.cpp:393
CNetAddr::IsCJDNS
bool IsCJDNS() const
Definition
netaddress.h:178
CNetAddr::IsTor
bool IsTor() const
Definition
netaddress.h:176
CNetAddr::IsRoutable
bool IsRoutable() const
Definition
netaddress.cpp:468
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:430
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:404
CNetAddr::IsIPv6
bool IsIPv6() const
Definition
netaddress.h:159
CNetAddr::IsInternal
bool IsInternal() const
Definition
netaddress.cpp:478
CNetAddr::IsRFC4193
bool IsRFC4193() const
Definition
netaddress.cpp:375
CNetAddr::IsRFC2544
bool IsRFC2544() const
Definition
netaddress.cpp:319
CNetAddr::GetNetwork
enum Network GetNetwork() const
Definition
netaddress.cpp:502
CNetAddr::IsRFC6145
bool IsRFC6145() const
Definition
netaddress.cpp:380
CNetAddr::GetReachabilityFrom
int GetReachabilityFrom(const CNetAddr &paddrPartner) const
Calculates a metric for how reachable (*this) is from a given partner.
Definition
netaddress.cpp:719
CNetAddr::IsRFC9637
bool IsRFC9637() const
Definition
netaddress.cpp:346
CNetAddr::IsRFC3964
bool IsRFC3964() const
Definition
netaddress.cpp:352
CNetAddr::IsRFC4380
bool IsRFC4380() const
Definition
netaddress.cpp:364
CNetAddr::IsRFC3927
bool IsRFC3927() const
Definition
netaddress.cpp:324
CNetAddr::IsRFC4862
bool IsRFC4862() const
Definition
netaddress.cpp:369
CNetAddr::IsRFC4843
bool IsRFC4843() const
Definition
netaddress.cpp:387
CNetAddr::IsI2P
bool IsI2P() const
Definition
netaddress.h:177
CServiceHash::CServiceHash
CServiceHash()
Definition
netaddress.h:575
CService
A combination of a network address (CNetAddr) and a (TCP) port.
Definition
netaddress.h:531
CService::GetPort
uint16_t GetPort() const
Definition
netaddress.cpp:841
CService::ToStringAddrPort
std::string ToStringAddrPort() const
Definition
netaddress.cpp:909
CService::GetKey
std::vector< unsigned char > GetKey() const
Definition
netaddress.cpp:901
CSubNet
Definition
netaddress.h:481
CSubNet::ToString
std::string ToString() const
Definition
netaddress.cpp:1053
CSubNet::IsValid
bool IsValid() const
Definition
netaddress.cpp:1086
CSubNet::Match
bool Match(const CNetAddr &addr) const
Definition
netaddress.cpp:1025
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
SeedRandomStateForTest
SeedRandomStateForTest(SeedRand::ZEROS)
ConsumeNetAddr
CNetAddr ConsumeNetAddr(FuzzedDataProvider &fuzzed_data_provider, FastRandomContext *rand) noexcept
Create a CNetAddr.
Definition
net.cpp:29
net.h
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.18.0