/root/bitcoin/src/test/fuzz/string.cpp
| Line | Count | Source | 
| 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 | } |