From 7f0bdbda112cd8021e3af67ef8cc341783b4c47f Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 10 Feb 2022 07:14:11 +0000 Subject: [PATCH] Merge bitcoin/bitcoin#24298: fuzz: Avoid unsigned integer overflow in FormatParagraph fa2f7d005932bff9b7d27744ae517b9e7910df8d fuzz: Avoid unsigned integer overflow in FormatParagraph (MarcoFalke) Pull request description: `FormatParagraph` is only ever called with compile time constant arguments, so I don't see the need for fuzzing it. Though, keep it for now, but avoid the unsigned integer overflow with this patch. ACKs for top commit: laanwj: Code review ACK fa2f7d005932bff9b7d27744ae517b9e7910df8d Tree-SHA512: 01fc64a9ef73c183921ca1b0cd8db9514c0a242e3acf215a3393f383ae129e01625ebb16eaf9cb86370eda62d0145c3dcf8f62e40edf5958abc1f777c5687280 --- src/test/fuzz/string.cpp | 3 ++- src/util/strencodings.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/fuzz/string.cpp b/src/test/fuzz/string.cpp index 2c7b19e39a..e7c046373e 100644 --- a/src/test/fuzz/string.cpp +++ b/src/test/fuzz/string.cpp @@ -45,7 +45,8 @@ void test_one_input(const std::vector& buffer) (void)CopyrightHolders(random_string_1, fuzzed_data_provider.ConsumeIntegral(), fuzzed_data_provider.ConsumeIntegral()); FeeEstimateMode fee_estimate_mode; (void)FeeModeFromString(random_string_1, fee_estimate_mode); - (void)FormatParagraph(random_string_1, fuzzed_data_provider.ConsumeIntegralInRange(0, 1000), fuzzed_data_provider.ConsumeIntegralInRange(0, 1000)); + const auto width{fuzzed_data_provider.ConsumeIntegralInRange(1, 1000)}; + (void)FormatParagraph(random_string_1, width, fuzzed_data_provider.ConsumeIntegralInRange(0, width)); (void)FormatSubVersion(random_string_1, fuzzed_data_provider.ConsumeIntegral(), 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 bcbaac3291..0bfdb083a1 100644 --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -384,6 +384,7 @@ bool ParseDouble(const std::string& str, double *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;