diff --git a/src/test/fuzz/base_encode_decode.cpp b/src/test/fuzz/base_encode_decode.cpp index 69caac58100..2ffcbdf7207 100644 --- a/src/test/fuzz/base_encode_decode.cpp +++ b/src/test/fuzz/base_encode_decode.cpp @@ -22,38 +22,38 @@ FUZZ_TARGET(base58_encode_decode) { FuzzedDataProvider provider{buffer.data(), buffer.size()}; const auto random_string{provider.ConsumeRandomLengthString(100)}; - const int max_ret_len{provider.ConsumeIntegralInRange(-1, 100)}; - // Decode/Encode roundtrip - if (std::vector decoded; DecodeBase58(random_string, decoded, max_ret_len)) { - const auto encoded_string{EncodeBase58(decoded)}; - assert(encoded_string == TrimStringView(random_string)); - assert(decoded.empty() || !DecodeBase58(encoded_string, decoded, provider.ConsumeIntegralInRange(0, decoded.size() - 1))); - } - // Encode/Decode roundtrip const auto encoded{EncodeBase58(MakeUCharSpan(random_string))}; - std::vector roundtrip_decoded; - assert(DecodeBase58(encoded, roundtrip_decoded, random_string.size()) - && std::ranges::equal(roundtrip_decoded, MakeUCharSpan(random_string))); + const auto decode_input{provider.ConsumeBool() ? random_string : encoded}; + const int max_ret_len{provider.ConsumeIntegralInRange(-1, decode_input.size() + 1)}; + if (std::vector decoded; DecodeBase58(decode_input, decoded, max_ret_len)) { + const auto encoded_string{EncodeBase58(decoded)}; + assert(encoded_string == TrimStringView(decode_input)); + if (decoded.size() > 0) { + assert(max_ret_len > 0); + assert(decoded.size() <= static_cast(max_ret_len)); + assert(!DecodeBase58(encoded_string, decoded, provider.ConsumeIntegralInRange(0, decoded.size() - 1))); + } + } } FUZZ_TARGET(base58check_encode_decode) { FuzzedDataProvider provider{buffer.data(), buffer.size()}; const auto random_string{provider.ConsumeRandomLengthString(100)}; - const int max_ret_len{provider.ConsumeIntegralInRange(-1, 100)}; - // Decode/Encode roundtrip - if (std::vector decoded; DecodeBase58Check(random_string, decoded, max_ret_len)) { - const auto encoded_string{EncodeBase58Check(decoded)}; - assert(encoded_string == TrimStringView(random_string)); - assert(decoded.empty() || !DecodeBase58Check(encoded_string, decoded, provider.ConsumeIntegralInRange(0, decoded.size() - 1))); - } - // Encode/Decode roundtrip const auto encoded{EncodeBase58Check(MakeUCharSpan(random_string))}; - std::vector roundtrip_decoded; - assert(DecodeBase58Check(encoded, roundtrip_decoded, random_string.size()) - && std::ranges::equal(roundtrip_decoded, MakeUCharSpan(random_string))); + const auto decode_input{provider.ConsumeBool() ? random_string : encoded}; + const int max_ret_len{provider.ConsumeIntegralInRange(-1, decode_input.size() + 1)}; + if (std::vector decoded; DecodeBase58Check(decode_input, decoded, max_ret_len)) { + const auto encoded_string{EncodeBase58Check(decoded)}; + assert(encoded_string == TrimStringView(decode_input)); + if (decoded.size() > 0) { + assert(max_ret_len > 0); + assert(decoded.size() <= static_cast(max_ret_len)); + assert(!DecodeBase58Check(encoded_string, decoded, provider.ConsumeIntegralInRange(0, decoded.size() - 1))); + } + } } FUZZ_TARGET(base32_encode_decode)