fuzz: Exclude too expensive inputs in miniscript_string target
This commit is contained in:
1 file changed
+4
@@ -11,6 +11,7 @@
|
|||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/descriptor.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@@ -1234,9 +1235,12 @@ FUZZ_TARGET(miniscript_smart, .init = FuzzInitSmart)
|
|||||||
/* Fuzz tests that test parsing from a string, and roundtripping via string. */
|
/* Fuzz tests that test parsing from a string, and roundtripping via string. */
|
||||||
FUZZ_TARGET(miniscript_string, .init = FuzzInit)
|
FUZZ_TARGET(miniscript_string, .init = FuzzInit)
|
||||||
{
|
{
|
||||||
|
constexpr auto is_too_expensive{[](std::span<const uint8_t> buf) { return HasTooManySubFrag(buf) || HasTooManyWrappers(buf); }};
|
||||||
|
|
||||||
if (buffer.empty()) return;
|
if (buffer.empty()) return;
|
||||||
FuzzedDataProvider provider(buffer.data(), buffer.size());
|
FuzzedDataProvider provider(buffer.data(), buffer.size());
|
||||||
auto str = provider.ConsumeBytesAsString(provider.remaining_bytes() - 1);
|
auto str = provider.ConsumeBytesAsString(provider.remaining_bytes() - 1);
|
||||||
|
if (is_too_expensive(MakeUCharSpan(str))) return;
|
||||||
const ParserContext parser_ctx{(MsCtx)provider.ConsumeBool()};
|
const ParserContext parser_ctx{(MsCtx)provider.ConsumeBool()};
|
||||||
auto parsed = miniscript::FromString(str, parser_ctx);
|
auto parsed = miniscript::FromString(str, parser_ctx);
|
||||||
if (!parsed) return;
|
if (!parsed) return;
|
||||||
|
|||||||
Reference in new issue
Block a user