aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2022-02-09 14:38:56 +0100
committerMarcoFalke <falke.marco@gmail.com>2022-02-09 14:38:22 +0100
commitfa2f7d005932bff9b7d27744ae517b9e7910df8d (patch)
tree677b15d787e4425d8b496f23144f130627d4aedd /src
parent8ac79973f8e923e9f1f560f4909b912ccea34035 (diff)
downloadbitcoin-fa2f7d005932bff9b7d27744ae517b9e7910df8d.tar.xz
fuzz: Avoid unsigned integer overflow in FormatParagraph
Diffstat (limited to 'src')
-rw-r--r--src/test/fuzz/string.cpp3
-rw-r--r--src/util/strencodings.cpp1
2 files changed, 3 insertions, 1 deletions
diff --git a/src/test/fuzz/string.cpp b/src/test/fuzz/string.cpp
index 8f071b71fe..ca57af25c4 100644
--- a/src/test/fuzz/string.cpp
+++ b/src/test/fuzz/string.cpp
@@ -145,7 +145,8 @@ FUZZ_TARGET(string)
(void)CopyrightHolders(random_string_1);
FeeEstimateMode fee_estimate_mode;
(void)FeeModeFromString(random_string_1, fee_estimate_mode);
- (void)FormatParagraph(random_string_1, fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 1000), fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 1000));
+ const auto width{fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 1000)};
+ (void)FormatParagraph(random_string_1, width, fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, width));
(void)FormatSubVersion(random_string_1, fuzzed_data_provider.ConsumeIntegral<int>(), random_string_vector);
(void)GetDescriptorChecksum(random_string_1);
(void)HelpExampleCli(random_string_1, random_string_2);
diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp
index a386f2b7b3..e0f0d63ff6 100644
--- a/src/util/strencodings.cpp
+++ b/src/util/strencodings.cpp
@@ -328,6 +328,7 @@ bool ParseUInt64(const std::string& str, uint64_t* out)
std::string FormatParagraph(const std::string& in, size_t width, size_t indent)
{
+ assert(width >= indent);
std::stringstream out;
size_t ptr = 0;
size_t indented = 0;