// Copyright (c) 2020-2021 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include #include #include FUZZ_TARGET(netaddress) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); const CNetAddr net_addr = ConsumeNetAddr(fuzzed_data_provider); (void)net_addr.GetHash(); (void)net_addr.GetNetClass(); if (net_addr.GetNetwork() == Network::NET_IPV4) { assert(net_addr.IsIPv4()); } if (net_addr.GetNetwork() == Network::NET_IPV6) { assert(net_addr.IsIPv6()); } if (net_addr.GetNetwork() == Network::NET_ONION) { assert(net_addr.IsTor()); } if (net_addr.GetNetwork() == Network::NET_INTERNAL) { assert(net_addr.IsInternal()); } if (net_addr.GetNetwork() == Network::NET_UNROUTABLE) { assert(!net_addr.IsRoutable()); } (void)net_addr.IsBindAny(); if (net_addr.IsInternal()) { assert(net_addr.GetNetwork() == Network::NET_INTERNAL); } if (net_addr.IsIPv4()) { assert(net_addr.GetNetwork() == Network::NET_IPV4 || net_addr.GetNetwork() == Network::NET_UNROUTABLE); } if (net_addr.IsIPv6()) { assert(net_addr.GetNetwork() == Network::NET_IPV6 || net_addr.GetNetwork() == Network::NET_UNROUTABLE); } (void)net_addr.IsLocal(); if (net_addr.IsRFC1918() || net_addr.IsRFC2544() || net_addr.IsRFC6598() || net_addr.IsRFC5737() || net_addr.IsRFC3927()) { assert(net_addr.IsIPv4()); } (void)net_addr.IsRFC2544(); 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()) { assert(net_addr.IsIPv6()); } (void)net_addr.IsRFC3927(); (void)net_addr.IsRFC3964(); if (net_addr.IsRFC4193()) { assert(net_addr.GetNetwork() == Network::NET_ONION || net_addr.GetNetwork() == Network::NET_INTERNAL || net_addr.GetNetwork() == Network::NET_UNROUTABLE); } (void)net_addr.IsRFC4380(); (void)net_addr.IsRFC4843(); (void)net_addr.IsRFC4862(); (void)net_addr.IsRFC5737(); (void)net_addr.IsRFC6052(); (void)net_addr.IsRFC6145(); (void)net_addr.IsRFC6598(); (void)net_addr.IsRFC7343(); if (!net_addr.IsRoutable()) { assert(net_addr.GetNetwork() == Network::NET_UNROUTABLE || net_addr.GetNetwork() == Network::NET_INTERNAL); } if (net_addr.IsTor()) { assert(net_addr.GetNetwork() == Network::NET_ONION); } (void)net_addr.IsValid(); (void)net_addr.ToString(); (void)net_addr.ToStringIP(); const CSubNet sub_net{net_addr, fuzzed_data_provider.ConsumeIntegral()}; (void)sub_net.IsValid(); (void)sub_net.ToString(); const CService service{net_addr, fuzzed_data_provider.ConsumeIntegral()}; (void)service.GetKey(); (void)service.GetPort(); (void)service.ToString(); (void)service.ToStringIPPort(); (void)service.ToStringPort(); const CNetAddr other_net_addr = ConsumeNetAddr(fuzzed_data_provider); (void)net_addr.GetReachabilityFrom(&other_net_addr); (void)sub_net.Match(other_net_addr); const CService other_service{net_addr, fuzzed_data_provider.ConsumeIntegral()}; assert((service == other_service) != (service != other_service)); (void)(service < other_service); const CSubNet sub_net_copy_1{net_addr, other_net_addr}; const CSubNet sub_net_copy_2{net_addr}; CNetAddr mutable_net_addr; mutable_net_addr.SetIP(net_addr); assert(net_addr == mutable_net_addr); }