9
9
#include < policy/policy.h>
10
10
#include < pubkey.h>
11
11
#include < script/descriptor.h>
12
+ #include < script/interpreter.h>
12
13
#include < script/script.h>
13
14
#include < script/sign.h>
14
15
#include < script/signingprovider.h>
@@ -30,7 +31,10 @@ void initialize()
30
31
31
32
void test_one_input (const std::vector<uint8_t >& buffer)
32
33
{
33
- const CScript script (buffer.begin (), buffer.end ());
34
+ FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
35
+ const Optional<CScript> script_opt = ConsumeDeserializable<CScript>(fuzzed_data_provider);
36
+ if (!script_opt) return ;
37
+ const CScript script{*script_opt};
34
38
35
39
std::vector<unsigned char > compressed;
36
40
if (CompressScript (script, compressed)) {
@@ -89,12 +93,30 @@ void test_one_input(const std::vector<uint8_t>& buffer)
89
93
ScriptToUniv (script, o4, false );
90
94
91
95
{
92
- FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
93
96
const std::vector<uint8_t > bytes = ConsumeRandomLengthByteVector (fuzzed_data_provider);
94
- // DecompressScript(..., ..., bytes) is not guaranteed to be defined if bytes.size() <= 23.
95
- if (bytes.size () >= 24 ) {
97
+ // DecompressScript(..., ..., bytes) is not guaranteed to be defined if the bytes vector is too short
98
+ if (bytes.size () >= 32 ) {
96
99
CScript decompressed_script;
97
100
DecompressScript (decompressed_script, fuzzed_data_provider.ConsumeIntegral <unsigned int >(), bytes);
98
101
}
99
102
}
103
+
104
+ const Optional<CScript> other_script = ConsumeDeserializable<CScript>(fuzzed_data_provider);
105
+ if (other_script) {
106
+ {
107
+ CScript script_mut{script};
108
+ (void )FindAndDelete (script_mut, *other_script);
109
+ }
110
+ const std::vector<std::string> random_string_vector = ConsumeRandomLengthStringVector (fuzzed_data_provider);
111
+ const uint32_t u32{fuzzed_data_provider.ConsumeIntegral <uint32_t >()};
112
+ const uint32_t flags{u32 | SCRIPT_VERIFY_P2SH};
113
+ {
114
+ CScriptWitness wit;
115
+ for (const auto & s : random_string_vector) {
116
+ wit.stack .emplace_back (s.begin (), s.end ());
117
+ }
118
+ (void )CountWitnessSigOps (script, *other_script, &wit, flags);
119
+ wit.SetNull ();
120
+ }
121
+ }
100
122
}
0 commit comments