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/net.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 <chainparams.h>
6
#include <net.h>
7
#include <net_permissions.h>
8
#include <netaddress.h>
9
#include <protocol.h>
10
#include <random.h>
11
#include <test/fuzz/FuzzedDataProvider.h>
12
#include <test/fuzz/fuzz.h>
13
#include <test/fuzz/util.h>
14
#include <test/fuzz/util/net.h>
15
#include <test/util/net.h>
16
#include <test/util/setup_common.h>
17
#include <util/asmap.h>
18
#include <util/chaintype.h>
19
#include <util/time.h>
20
21
#include <cstdint>
22
#include <optional>
23
#include <string>
24
#include <vector>
25
26
void initialize_net()
27
0
{
28
0
    static const auto testing_setup = MakeNoLogFileContext<>(ChainType::MAIN);
29
0
}
30
31
FUZZ_TARGET(net, .init = initialize_net)
32
0
{
33
0
    FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
34
0
    SetMockTime(ConsumeTime(fuzzed_data_provider));
35
0
    CNode node{ConsumeNode(fuzzed_data_provider)};
36
0
    node.SetCommonVersion(fuzzed_data_provider.ConsumeIntegral<int>());
37
0
    if (const auto service_opt =
38
0
            ConsumeDeserializable<CService>(fuzzed_data_provider, ConsumeDeserializationParams<CNetAddr::SerParams>(fuzzed_data_provider)))
39
0
    {
40
0
        node.SetAddrLocal(*service_opt);
41
0
    }
42
0
    LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
43
0
        CallOneOf(
44
0
            fuzzed_data_provider,
45
0
            [&] {
46
0
                node.CloseSocketDisconnect();
47
0
            },
48
0
            [&] {
49
0
                CNodeStats stats;
50
0
                node.CopyStats(stats);
51
0
            },
52
0
            [&] {
53
0
                const CNode* add_ref_node = node.AddRef();
54
0
                assert(add_ref_node == &node);
55
0
            },
56
0
            [&] {
57
0
                if (node.GetRefCount() > 0) {
58
0
                    node.Release();
59
0
                }
60
0
            },
61
0
            [&] {
62
0
                const std::vector<uint8_t> b = ConsumeRandomLengthByteVector(fuzzed_data_provider);
63
0
                bool complete;
64
0
                node.ReceiveMsgBytes(b, complete);
65
0
            });
66
0
    }
67
68
0
    (void)node.GetAddrLocal();
69
0
    (void)node.GetId();
70
0
    (void)node.GetLocalNonce();
71
0
    const int ref_count = node.GetRefCount();
72
0
    assert(ref_count >= 0);
73
0
    (void)node.GetCommonVersion();
74
75
0
    const NetPermissionFlags net_permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
76
0
    (void)node.HasPermission(net_permission_flags);
77
0
    (void)node.ConnectedThroughNetwork();
78
0
}
79
80
FUZZ_TARGET(local_address, .init = initialize_net)
81
0
{
82
0
    FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
83
0
    SetMockTime(ConsumeTime(fuzzed_data_provider));
84
0
    CService service{ConsumeService(fuzzed_data_provider)};
85
0
    CNode node{ConsumeNode(fuzzed_data_provider)};
86
0
    {
87
0
        LOCK(g_maplocalhost_mutex);
88
0
        mapLocalHost.clear();
89
0
    }
90
0
    LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
91
0
        CallOneOf(
92
0
            fuzzed_data_provider,
93
0
            [&] {
94
0
                service = ConsumeService(fuzzed_data_provider);
95
0
            },
96
0
            [&] {
97
0
                const bool added{AddLocal(service, fuzzed_data_provider.ConsumeIntegralInRange<int>(0, LOCAL_MAX - 1))};
98
0
                if (!added) return;
99
0
                assert(service.IsRoutable());
100
0
                assert(IsLocal(service));
101
0
                assert(SeenLocal(service));
102
0
            },
103
0
            [&] {
104
0
                (void)RemoveLocal(service);
105
0
            },
106
0
            [&] {
107
0
                (void)SeenLocal(service);
108
0
            },
109
0
            [&] {
110
0
                (void)IsLocal(service);
111
0
            },
112
0
            [&] {
113
0
                (void)GetLocalAddress(node);
114
0
            });
115
0
    }
116
0
}