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