Coverage Report

Created: 2025-06-06 15:08

/root/bitcoin/src/test/fuzz/string.cpp
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) 2020-present 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 <blockfilter.h>
6
#include <clientversion.h>
7
#include <common/args.h>
8
#include <common/messages.h>
9
#include <common/settings.h>
10
#include <common/system.h>
11
#include <common/url.h>
12
#include <netbase.h>
13
#include <outputtype.h>
14
#include <rpc/client.h>
15
#include <rpc/request.h>
16
#include <rpc/server.h>
17
#include <rpc/util.h>
18
#include <script/descriptor.h>
19
#include <script/script.h>
20
#include <serialize.h>
21
#include <streams.h>
22
#include <test/fuzz/FuzzedDataProvider.h>
23
#include <test/fuzz/fuzz.h>
24
#include <test/fuzz/util.h>
25
#include <util/strencodings.h>
26
#include <util/string.h>
27
#include <util/translation.h>
28
29
#include <cassert>
30
#include <cstdint>
31
#include <cstdlib>
32
#include <ios>
33
#include <stdexcept>
34
#include <string>
35
#include <vector>
36
37
enum class FeeEstimateMode;
38
39
using common::AmountErrMsg;
40
using common::AmountHighWarn;
41
using common::FeeModeFromString;
42
using common::ResolveErrMsg;
43
using util::ContainsNoNUL;
44
using util::Join;
45
using util::RemovePrefix;
46
using util::SplitString;
47
using util::TrimString;
48
49
FUZZ_TARGET(string)
50
0
{
51
0
    FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
52
0
    const std::string random_string_1 = fuzzed_data_provider.ConsumeRandomLengthString(32);
53
0
    const std::string random_string_2 = fuzzed_data_provider.ConsumeRandomLengthString(32);
54
0
    const std::vector<std::string> random_string_vector = ConsumeRandomLengthStringVector(fuzzed_data_provider);
55
56
0
    (void)AmountErrMsg(random_string_1, random_string_2);
57
0
    (void)AmountHighWarn(random_string_1);
58
0
    BlockFilterType block_filter_type;
59
0
    (void)BlockFilterTypeByName(random_string_1, block_filter_type);
60
0
    (void)Capitalize(random_string_1);
61
0
    (void)CopyrightHolders(random_string_1);
62
0
    FeeEstimateMode fee_estimate_mode;
63
0
    (void)FeeModeFromString(random_string_1, fee_estimate_mode);
64
0
    const auto width{fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 1000)};
65
0
    (void)FormatParagraph(random_string_1, width, fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, width));
66
0
    (void)FormatSubVersion(random_string_1, fuzzed_data_provider.ConsumeIntegral<int>(), random_string_vector);
67
0
    (void)GetDescriptorChecksum(random_string_1);
68
0
    (void)HelpExampleCli(random_string_1, random_string_2);
69
0
    (void)HelpExampleRpc(random_string_1, random_string_2);
70
0
    (void)HelpMessageGroup(random_string_1);
71
0
    (void)HelpMessageOpt(random_string_1, random_string_2);
72
0
    (void)IsDeprecatedRPCEnabled(random_string_1);
73
0
    (void)Join(random_string_vector, random_string_1);
74
0
    (void)JSONRPCError(fuzzed_data_provider.ConsumeIntegral<int>(), random_string_1);
75
0
    const common::Settings settings;
76
0
    (void)OnlyHasDefaultSectionSetting(settings, random_string_1, random_string_2);
77
0
    (void)ParseNetwork(random_string_1);
78
0
    (void)ParseOutputType(random_string_1);
79
0
    (void)RemovePrefix(random_string_1, random_string_2);
80
0
    (void)ResolveErrMsg(random_string_1, random_string_2);
81
0
    try {
82
0
        (void)RPCConvertNamedValues(random_string_1, random_string_vector);
83
0
    } catch (const std::runtime_error&) {
84
0
    }
85
0
    try {
86
0
        (void)RPCConvertValues(random_string_1, random_string_vector);
87
0
    } catch (const std::runtime_error&) {
88
0
    }
89
0
    (void)SanitizeString(random_string_1);
90
0
    (void)SanitizeString(random_string_1, fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 3));
91
0
#ifndef WIN32
92
0
    (void)ShellEscape(random_string_1);
93
0
#endif // WIN32
94
0
    uint16_t port_out;
95
0
    std::string host_out;
96
0
    SplitHostPort(random_string_1, port_out, host_out);
97
0
    (void)TimingResistantEqual(random_string_1, random_string_2);
98
0
    (void)ToLower(random_string_1);
99
0
    (void)ToUpper(random_string_1);
100
0
    (void)TrimString(random_string_1);
101
0
    (void)TrimString(random_string_1, random_string_2);
102
0
    (void)UrlDecode(random_string_1);
103
0
    (void)ContainsNoNUL(random_string_1);
104
0
    try {
105
0
        throw scriptnum_error{random_string_1};
106
0
    } catch (const std::runtime_error&) {
107
0
    }
108
109
0
    {
110
0
        DataStream data_stream{};
111
0
        std::string s;
112
0
        auto limited_string = LIMITED_STRING(s, 10);
113
0
        data_stream << random_string_1;
114
0
        try {
115
0
            data_stream >> limited_string;
116
0
            assert(data_stream.empty());
117
0
            assert(s.size() <= random_string_1.size());
118
0
            assert(s.size() <= 10);
119
0
            if (!random_string_1.empty()) {
120
0
                assert(!s.empty());
121
0
            }
122
0
        } catch (const std::ios_base::failure&) {
123
0
        }
124
0
    }
125
0
    {
126
0
        DataStream data_stream{};
127
0
        const auto limited_string = LIMITED_STRING(random_string_1, 10);
128
0
        data_stream << limited_string;
129
0
        std::string deserialized_string;
130
0
        data_stream >> deserialized_string;
131
0
        assert(data_stream.empty());
132
0
        assert(deserialized_string == random_string_1);
133
0
    }
134
0
    {
135
0
        int64_t amount_out;
136
0
        (void)ParseFixedPoint(random_string_1, fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024), &amount_out);
137
0
    }
138
0
    {
139
0
        const auto single_split{SplitString(random_string_1, fuzzed_data_provider.ConsumeIntegral<char>())};
140
0
        assert(single_split.size() >= 1);
141
0
        const auto any_split{SplitString(random_string_1, random_string_2)};
142
0
        assert(any_split.size() >= 1);
143
0
    }
144
0
    {
145
0
        (void)Untranslated(random_string_1);
146
0
        const bilingual_str bs1{random_string_1, random_string_2};
147
0
        const bilingual_str bs2{random_string_2, random_string_1};
148
0
        (void)(bs1 + bs2);
149
0
    }
150
0
}