diff --git a/src/test/fuzz/descriptor_parse.cpp b/src/test/fuzz/descriptor_parse.cpp index 4091e8667bce6..a5568d3528e41 100644 --- a/src/test/fuzz/descriptor_parse.cpp +++ b/src/test/fuzz/descriptor_parse.cpp @@ -107,11 +107,30 @@ class MockedDescriptorConverter { MockedDescriptorConverter MOCKED_DESC_CONVERTER; /** Test a successfully parsed descriptor. */ -static void TestDescriptor(const Descriptor& desc) +static void TestDescriptor(const Descriptor& desc, FlatSigningProvider& sig_provider, std::string& dummy) { - (void)desc.ToString(); + // Trivial helpers. (void)desc.IsRange(); (void)desc.IsSolvable(); + (void)desc.IsSingleType(); + (void)desc.GetOutputType(); + + // Serialization to string representation. + (void)desc.ToString(); + (void)desc.ToPrivateString(sig_provider, dummy); + (void)desc.ToNormalizedString(sig_provider, dummy); + + // Serialization to Script. + DescriptorCache cache; + std::vector out_scripts; + (void)desc.Expand(0, sig_provider, out_scripts, sig_provider, &cache); + (void)desc.ExpandPrivate(0, sig_provider, sig_provider); + (void)desc.ExpandFromCache(0, cache, out_scripts, sig_provider); + + // If we could serialize to script we must be able to infer using the same provider. + if (!out_scripts.empty()) { + assert(InferDescriptor(out_scripts.back(), sig_provider)); + } } void initialize_descriptor_parse() @@ -133,7 +152,7 @@ FUZZ_TARGET_INIT(mocked_descriptor_parse, initialize_mocked_descriptor_parse) FlatSigningProvider signing_provider; std::string error; const auto desc = Parse(*descriptor, signing_provider, error); - if (desc) TestDescriptor(*desc); + if (desc) TestDescriptor(*desc, signing_provider, error); } } @@ -144,6 +163,6 @@ FUZZ_TARGET_INIT(descriptor_parse, initialize_descriptor_parse) std::string error; for (const bool require_checksum : {true, false}) { const auto desc = Parse(descriptor, signing_provider, error, require_checksum); - if (desc) TestDescriptor(*desc); + if (desc) TestDescriptor(*desc, signing_provider, error); } }