mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-14 01:25:09 +01:00
fuzz: Exclude too expensive inputs in descriptor_parse targets
Also, fixup iwyu warnings in the util module. Also, fixup a typo. The moved part can be reviewed with the git option: --color-moved=dimmed-zebra
This commit is contained in:
@@ -77,21 +77,9 @@ void initialize_mocked_descriptor_parse()
|
||||
|
||||
FUZZ_TARGET(mocked_descriptor_parse, .init = initialize_mocked_descriptor_parse)
|
||||
{
|
||||
// Key derivation is expensive. Deriving deep derivation paths take a lot of compute and we'd
|
||||
// rather spend time elsewhere in this target, like on the actual descriptor syntax. So rule
|
||||
// out strings which could correspond to a descriptor containing a too large derivation path.
|
||||
if (HasDeepDerivPath(buffer)) return;
|
||||
|
||||
// Some fragments can take a virtually unlimited number of sub-fragments (thresh, multi_a) but
|
||||
// may perform quadratic operations on them. Limit the number of sub-fragments per fragment.
|
||||
if (HasTooManySubFrag(buffer)) return;
|
||||
|
||||
// The script building logic performs quadratic copies in the number of nested wrappers. Limit
|
||||
// the number of nested wrappers per fragment.
|
||||
if (HasTooManyWrappers(buffer)) return;
|
||||
|
||||
const std::string mocked_descriptor{buffer.begin(), buffer.end()};
|
||||
if (const auto descriptor = MOCKED_DESC_CONVERTER.GetDescriptor(mocked_descriptor)) {
|
||||
if (IsTooExpensive(MakeUCharSpan(*descriptor))) return;
|
||||
FlatSigningProvider signing_provider;
|
||||
std::string error;
|
||||
const auto desc = Parse(*descriptor, signing_provider, error);
|
||||
@@ -106,10 +94,7 @@ FUZZ_TARGET(mocked_descriptor_parse, .init = initialize_mocked_descriptor_parse)
|
||||
|
||||
FUZZ_TARGET(descriptor_parse, .init = initialize_descriptor_parse)
|
||||
{
|
||||
// See comments above for rationales.
|
||||
if (HasDeepDerivPath(buffer)) return;
|
||||
if (HasTooManySubFrag(buffer)) return;
|
||||
if (HasTooManyWrappers(buffer)) return;
|
||||
if (IsTooExpensive(buffer)) return;
|
||||
|
||||
const std::string descriptor(buffer.begin(), buffer.end());
|
||||
FlatSigningProvider signing_provider;
|
||||
|
||||
Reference in New Issue
Block a user