Merge bitcoin/bitcoin#21922: fuzz: Avoid timeout in EncodeBase58

faa0d94a7d9cdd10e81ee231a7b06d4b14b37e13 fuzz: Avoid timeout in EncodeBase58 (MarcoFalke)

Pull request description:

  The complexity is O(N^2), so limit the size.

  Hopefully fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34126

  Oss-Fuzz testcase for `rpc` fuzzer: https://github.com/bitcoin/bitcoin/files/6461382/clusterfuzz-testcase-minimized-rpc-4831734974775296.log

ACKs for top commit:
  practicalswift:
    cr ACK faa0d94a7d9cdd10e81ee231a7b06d4b14b37e13: patch looks correct
  sipa:
    utACK faa0d94a7d9cdd10e81ee231a7b06d4b14b37e13

Tree-SHA512: 57ad9de8d811b828982d09a586782fc8a62fa3685590301d58120e2249caa30a9dccd3abe0b47e00ea8482de705fe0edbed298ab8761ea0d29496b50ed2db5d7
This commit is contained in:
fanquake 2021-05-12 11:02:25 +10:00 committed by pasta
parent 813993d44a
commit 2398283ff6
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984

View File

@ -174,6 +174,7 @@ const std::vector<std::string> RPC_COMMANDS_SAFE_FOR_FUZZING{
std::string ConsumeScalarRPCArgument(FuzzedDataProvider& fuzzed_data_provider) std::string ConsumeScalarRPCArgument(FuzzedDataProvider& fuzzed_data_provider)
{ {
const size_t max_string_length = 4096; const size_t max_string_length = 4096;
const size_t max_base58_bytes_length{64};
std::string r; std::string r;
CallOneOf( CallOneOf(
fuzzed_data_provider, fuzzed_data_provider,
@ -227,11 +228,11 @@ std::string ConsumeScalarRPCArgument(FuzzedDataProvider& fuzzed_data_provider)
}, },
[&] { [&] {
// base58 argument // base58 argument
r = EncodeBase58(MakeUCharSpan(fuzzed_data_provider.ConsumeRandomLengthString(max_string_length))); r = EncodeBase58(MakeUCharSpan(fuzzed_data_provider.ConsumeRandomLengthString(max_base58_bytes_length)));
}, },
[&] { [&] {
// base58 argument with checksum // base58 argument with checksum
r = EncodeBase58Check(MakeUCharSpan(fuzzed_data_provider.ConsumeRandomLengthString(max_string_length))); r = EncodeBase58Check(MakeUCharSpan(fuzzed_data_provider.ConsumeRandomLengthString(max_base58_bytes_length)));
}, },
[&] { [&] {
// hex encoded block // hex encoded block