mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-28 20:17:29 -03:00
fae216a73d
-BEGIN VERIFY SCRIPT- # Rename sed -i -e 's/MakeFuzzingContext/MakeNoLogFileContext/g' $(git grep -l MakeFuzzingContext) # Bump the copyright of touched files in this scripted diff to avoid touching them again later ./contrib/devtools/copyright_header.py update ./src/test/fuzz/ -END VERIFY SCRIPT-
102 lines
3.8 KiB
C++
102 lines
3.8 KiB
C++
// 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 <netaddress.h>
|
|
#include <test/fuzz/FuzzedDataProvider.h>
|
|
#include <test/fuzz/fuzz.h>
|
|
#include <test/fuzz/util.h>
|
|
|
|
#include <cassert>
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
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<uint8_t>()};
|
|
(void)sub_net.IsValid();
|
|
(void)sub_net.ToString();
|
|
|
|
const CService service{net_addr, fuzzed_data_provider.ConsumeIntegral<uint16_t>()};
|
|
(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<uint16_t>()};
|
|
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);
|
|
}
|