aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/fuzz/script.cpp')
-rw-r--r--src/test/fuzz/script.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/test/fuzz/script.cpp b/src/test/fuzz/script.cpp
index 0d18784302..2f50f1b838 100644
--- a/src/test/fuzz/script.cpp
+++ b/src/test/fuzz/script.cpp
@@ -14,14 +14,16 @@
#include <script/signingprovider.h>
#include <script/standard.h>
#include <streams.h>
+#include <test/fuzz/FuzzedDataProvider.h>
#include <test/fuzz/fuzz.h>
+#include <test/fuzz/util.h>
#include <univalue.h>
#include <util/memory.h>
void initialize()
{
// Fuzzers using pubkey must hold an ECCVerifyHandle.
- static const auto verify_handle = MakeUnique<ECCVerifyHandle>();
+ static const ECCVerifyHandle verify_handle;
SelectParams(CBaseChainParams::REGTEST);
}
@@ -41,13 +43,6 @@ void test_one_input(const std::vector<uint8_t>& buffer)
assert(script == decompressed_script);
}
- for (unsigned int size = 0; size < 6; ++size) {
- std::vector<unsigned char> vch(GetSpecialScriptSize(size), 0x00);
- vch.insert(vch.end(), buffer.begin(), buffer.end());
- CScript decompressed_script;
- (void)DecompressScript(decompressed_script, size, vch);
- }
-
CTxDestination address;
(void)ExtractDestination(script, address);
@@ -92,4 +87,14 @@ void test_one_input(const std::vector<uint8_t>& buffer)
ScriptToUniv(script, o3, true);
UniValue o4(UniValue::VOBJ);
ScriptToUniv(script, o4, false);
+
+ {
+ FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
+ const std::vector<uint8_t> bytes = ConsumeRandomLengthByteVector(fuzzed_data_provider);
+ // DecompressScript(..., ..., bytes) is not guaranteed to be defined if bytes.size() <= 23.
+ if (bytes.size() >= 24) {
+ CScript decompressed_script;
+ DecompressScript(decompressed_script, fuzzed_data_provider.ConsumeIntegral<unsigned int>(), bytes);
+ }
+ }
}