fuzz coverage

Coverage Report

Created: 2025-06-01 19:34

/Users/eugenesiegel/btc/bitcoin/src/node/warnings.cpp
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-2022 The Bitcoin Core developers
3
// Distributed under the MIT software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6
#include <bitcoin-build-config.h> // IWYU pragma: keep
7
8
#include <node/warnings.h>
9
10
#include <common/system.h>
11
#include <node/interface_ui.h>
12
#include <sync.h>
13
#include <univalue.h>
14
#include <util/translation.h>
15
16
#include <utility>
17
#include <vector>
18
19
namespace node {
20
Warnings::Warnings()
21
99.9k
{
22
    // Pre-release build warning
23
99.9k
    if (!CLIENT_VERSION_IS_RELEASE) {
Line
Count
Source
12
99.9k
#define CLIENT_VERSION_IS_RELEASE false
24
99.9k
        m_warnings.insert(
25
99.9k
            {Warning::PRE_RELEASE_TEST_BUILD,
26
99.9k
             _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications")});
27
99.9k
    }
28
99.9k
}
29
bool Warnings::Set(warning_type id, bilingual_str message)
30
0
{
31
0
    const auto& [_, inserted]{WITH_LOCK(m_mutex, return m_warnings.insert({id, std::move(message)}))};
Line
Count
Source
301
0
#define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }())
32
0
    if (inserted) uiInterface.NotifyAlertChanged();
33
0
    return inserted;
34
0
}
35
36
bool Warnings::Unset(warning_type id)
37
47.5k
{
38
47.5k
    auto success{WITH_LOCK(m_mutex, return m_warnings.erase(id))};
Line
Count
Source
301
47.5k
#define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }())
39
47.5k
    if (success) 
uiInterface.NotifyAlertChanged()0
;
40
47.5k
    return success;
41
47.5k
}
42
43
std::vector<bilingual_str> Warnings::GetMessages() const
44
0
{
45
0
    LOCK(m_mutex);
Line
Count
Source
257
0
#define LOCK(cs) UniqueLock UNIQUE_NAME(criticalblock)(MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__)
Line
Count
Source
11
0
#define UNIQUE_NAME(name) PASTE2(name, __COUNTER__)
Line
Count
Source
9
0
#define PASTE2(x, y) PASTE(x, y)
Line
Count
Source
8
0
#define PASTE(x, y) x ## y
46
0
    std::vector<bilingual_str> messages;
47
0
    messages.reserve(m_warnings.size());
48
0
    for (const auto& [id, msg] : m_warnings) {
49
0
        messages.push_back(msg);
50
0
    }
51
0
    return messages;
52
0
}
53
54
UniValue GetWarningsForRpc(const Warnings& warnings, bool use_deprecated)
55
0
{
56
0
    if (use_deprecated) {
57
0
        const auto all_messages{warnings.GetMessages()};
58
0
        return all_messages.empty() ? "" : all_messages.back().original;
59
0
    }
60
61
0
    UniValue messages{UniValue::VARR};
62
0
    for (auto&& message : warnings.GetMessages()) {
63
0
        messages.push_back(std::move(message.original));
64
0
    }
65
0
    return messages;
66
0
}
67
} // namespace node