diff --git a/src/test/fuzz/miniscript.cpp b/src/test/fuzz/miniscript.cpp index 5d9a39bbd41..c6f8202d6bb 100644 --- a/src/test/fuzz/miniscript.cpp +++ b/src/test/fuzz/miniscript.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -1234,9 +1235,12 @@ FUZZ_TARGET(miniscript_smart, .init = FuzzInitSmart) /* Fuzz tests that test parsing from a string, and roundtripping via string. */ FUZZ_TARGET(miniscript_string, .init = FuzzInit) { + constexpr auto is_too_expensive{[](std::span buf) { return HasTooManySubFrag(buf) || HasTooManyWrappers(buf); }}; + if (buffer.empty()) return; FuzzedDataProvider provider(buffer.data(), buffer.size()); auto str = provider.ConsumeBytesAsString(provider.remaining_bytes() - 1); + if (is_too_expensive(MakeUCharSpan(str))) return; const ParserContext parser_ctx{(MsCtx)provider.ConsumeBool()}; auto parsed = miniscript::FromString(str, parser_ctx); if (!parsed) return;