Branch data Line data Source code
1 : : // Copyright (c) 2020-2022 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 [ + - ]: 1040 : FUZZ_TARGET(netaddress)
16 : : {
17 : 626 : SeedRandomStateForTest(SeedRand::ZEROS);
18 : 626 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
19 : :
20 : 626 : const CNetAddr net_addr = ConsumeNetAddr(fuzzed_data_provider);
21 [ + - ]: 626 : (void)net_addr.GetNetClass();
22 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_IPV4) {
23 [ - + ]: 89 : assert(net_addr.IsIPv4());
24 : : }
25 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_IPV6) {
26 [ - + ]: 144 : assert(net_addr.IsIPv6());
27 : : }
28 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_ONION) {
29 [ - + ]: 88 : assert(net_addr.IsTor());
30 : : }
31 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_I2P) {
32 [ - + ]: 21 : assert(net_addr.IsI2P());
33 : : }
34 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_CJDNS) {
35 [ - + ]: 22 : assert(net_addr.IsCJDNS());
36 : : }
37 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_INTERNAL) {
38 [ + - - + ]: 158 : assert(net_addr.IsInternal());
39 : : }
40 [ + - + + ]: 626 : if (net_addr.GetNetwork() == Network::NET_UNROUTABLE) {
41 [ + - - + ]: 104 : assert(!net_addr.IsRoutable());
42 : : }
43 [ + - ]: 626 : (void)net_addr.IsBindAny();
44 [ + - + + ]: 626 : if (net_addr.IsInternal()) {
45 [ + - - + ]: 158 : assert(net_addr.GetNetwork() == Network::NET_INTERNAL);
46 : : }
47 [ + + ]: 626 : if (net_addr.IsIPv4()) {
48 [ + - + + : 130 : assert(net_addr.GetNetwork() == Network::NET_IPV4 || net_addr.GetNetwork() == Network::NET_UNROUTABLE);
+ - - + ]
49 : : }
50 [ + + ]: 626 : if (net_addr.IsIPv6()) {
51 [ + - + + : 207 : assert(net_addr.GetNetwork() == Network::NET_IPV6 || net_addr.GetNetwork() == Network::NET_UNROUTABLE);
+ - - + ]
52 : : }
53 [ + - ]: 626 : (void)net_addr.IsLocal();
54 [ + - + + : 626 : if (net_addr.IsRFC1918() || net_addr.IsRFC2544() || net_addr.IsRFC6598() || net_addr.IsRFC5737() || net_addr.IsRFC3927()) {
+ - + + +
- + + + -
+ + + - +
+ ]
55 [ - + ]: 18 : assert(net_addr.IsIPv4());
56 : : }
57 [ + - ]: 626 : (void)net_addr.IsRFC2544();
58 [ + - + + : 626 : 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 [ - + ]: 23 : assert(net_addr.IsIPv6());
60 : : }
61 [ + - ]: 626 : (void)net_addr.IsRFC3927();
62 [ + - ]: 626 : (void)net_addr.IsRFC3964();
63 [ + - + + ]: 626 : if (net_addr.IsRFC4193()) {
64 [ + - + - : 39 : assert(net_addr.GetNetwork() == Network::NET_INTERNAL || net_addr.GetNetwork() == Network::NET_UNROUTABLE);
+ - - + ]
65 : : }
66 [ + - ]: 626 : (void)net_addr.IsRFC4380();
67 [ + - ]: 626 : (void)net_addr.IsRFC4843();
68 [ + - ]: 626 : (void)net_addr.IsRFC4862();
69 [ + - ]: 626 : (void)net_addr.IsRFC5737();
70 [ + - ]: 626 : (void)net_addr.IsRFC6052();
71 [ + - ]: 626 : (void)net_addr.IsRFC6145();
72 [ + - ]: 626 : (void)net_addr.IsRFC6598();
73 [ + - ]: 626 : (void)net_addr.IsRFC7343();
74 [ + - + + ]: 626 : if (!net_addr.IsRoutable()) {
75 [ + - + + : 262 : assert(net_addr.GetNetwork() == Network::NET_UNROUTABLE || net_addr.GetNetwork() == Network::NET_INTERNAL);
+ - - + ]
76 : : }
77 [ + + ]: 626 : if (net_addr.IsTor()) {
78 [ + - - + ]: 88 : assert(net_addr.GetNetwork() == Network::NET_ONION);
79 : : }
80 [ + + ]: 626 : if (net_addr.IsI2P()) {
81 [ + - - + ]: 21 : assert(net_addr.GetNetwork() == Network::NET_I2P);
82 : : }
83 [ + + ]: 626 : if (net_addr.IsCJDNS()) {
84 [ + - - + ]: 22 : assert(net_addr.GetNetwork() == Network::NET_CJDNS);
85 : : }
86 [ + - ]: 626 : (void)net_addr.IsValid();
87 [ + - ]: 626 : (void)net_addr.ToStringAddr();
88 : :
89 [ + - ]: 626 : const CSubNet sub_net{net_addr, fuzzed_data_provider.ConsumeIntegral<uint8_t>()};
90 [ + - ]: 626 : (void)sub_net.IsValid();
91 [ + - ]: 626 : (void)sub_net.ToString();
92 : :
93 [ + - ]: 626 : const CService service{net_addr, fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
94 [ + - ]: 626 : (void)service.GetKey();
95 [ + - ]: 626 : (void)service.GetPort();
96 [ + - ]: 626 : (void)service.ToStringAddrPort();
97 : 626 : (void)CServiceHash()(service);
98 : 626 : (void)CServiceHash(0, 0)(service);
99 : :
100 : 626 : const CNetAddr other_net_addr = ConsumeNetAddr(fuzzed_data_provider);
101 [ + - ]: 626 : (void)net_addr.GetReachabilityFrom(other_net_addr);
102 [ + - ]: 626 : (void)sub_net.Match(other_net_addr);
103 : :
104 [ + - ]: 626 : const CService other_service{net_addr, fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
105 [ + - + - : 626 : assert((service == other_service) != (service != other_service));
- + ]
106 [ + - ]: 626 : (void)(service < other_service);
107 : :
108 [ + - ]: 626 : const CSubNet sub_net_copy_1{net_addr, other_net_addr};
109 [ + - ]: 626 : const CSubNet sub_net_copy_2{net_addr};
110 : :
111 [ + - ]: 626 : CNetAddr mutable_net_addr;
112 [ + - ]: 626 : mutable_net_addr.SetIP(net_addr);
113 [ + - - + ]: 626 : assert(net_addr == mutable_net_addr);
114 : 626 : }
|