aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAntoine Poinsot <darosior@protonmail.com>2023-02-17 12:16:09 +0100
committerAntoine Poinsot <darosior@protonmail.com>2023-02-17 12:41:04 +0100
commitc1b7bd047f47dcd3eb6897adfaf9a55594deff5d (patch)
tree3d41b03d34a21fa72dee6170d6f4828a383a32cd /src
parent73966f75f67fb797163f0a766292a79d4b2c1b70 (diff)
downloadbitcoin-c1b7bd047f47dcd3eb6897adfaf9a55594deff5d.tar.xz
fuzz: avoid redundant dup key checks when creating Miniscript nodes
Check it only once on the top level node. Running libfuzzer with -runs=0 against the qa-assets corpus (1b9ddc96586769d92b1b62775f397b7f1a63f142). Without this patch: miniscript_stable: Done 6616 runs in 118 second(s) miniscript_smart: Done 13182 runs in 253 second(s) With this patch: miniscript_stable: Done 6616 runs in 57 second(s) miniscript_smart: Done 13182 runs in 124 second(s)
Diffstat (limited to 'src')
-rw-r--r--src/test/fuzz/miniscript.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/test/fuzz/miniscript.cpp b/src/test/fuzz/miniscript.cpp
index 1b791fc19c..73096cd5ca 100644
--- a/src/test/fuzz/miniscript.cpp
+++ b/src/test/fuzz/miniscript.cpp
@@ -253,7 +253,9 @@ using Type = miniscript::Type;
using miniscript::operator"" _mst;
//! Construct a miniscript node as a shared_ptr.
-template<typename... Args> NodeRef MakeNodeRef(Args&&... args) { return miniscript::MakeNodeRef<CPubKey>(KEY_COMP, std::forward<Args>(args)...); }
+template<typename... Args> NodeRef MakeNodeRef(Args&&... args) {
+ return miniscript::MakeNodeRef<CPubKey>(miniscript::internal::NoDupCheck{}, std::forward<Args>(args)...);
+}
/** Information about a yet to be constructed Miniscript node. */
struct NodeInfo {
@@ -762,6 +764,7 @@ NodeRef GenNode(F ConsumeNode, Type root_type = ""_mst, bool strict_valid = fals
}
}
assert(stack.size() == 1);
+ stack[0]->DuplicateKeyCheck(KEY_COMP);
return std::move(stack[0]);
}