Coverage Report

Created: 2025-09-19 18:31

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