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