/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 | } |