Skip to content

Commit 8de7271

Browse files
tests: Fill fuzzing coverage gaps for functions in script/script.h, script/script_error.h and script/standard.h
1 parent c571ecb commit 8de7271

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/test/fuzz/script.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <script/descriptor.h>
1212
#include <script/interpreter.h>
1313
#include <script/script.h>
14+
#include <script/script_error.h>
1415
#include <script/sign.h>
1516
#include <script/signingprovider.h>
1617
#include <script/standard.h>
@@ -21,6 +22,8 @@
2122
#include <univalue.h>
2223
#include <util/memory.h>
2324

25+
#include <algorithm>
26+
#include <cassert>
2427
#include <cstdint>
2528
#include <optional>
2629
#include <string>
@@ -124,4 +127,40 @@ void test_one_input(const std::vector<uint8_t>& buffer)
124127
wit.SetNull();
125128
}
126129
}
130+
131+
(void)GetOpName(ConsumeOpcodeType(fuzzed_data_provider));
132+
(void)ScriptErrorString(static_cast<ScriptError>(fuzzed_data_provider.ConsumeIntegralInRange<int>(0, SCRIPT_ERR_ERROR_COUNT)));
133+
134+
{
135+
const std::vector<uint8_t> bytes = ConsumeRandomLengthByteVector(fuzzed_data_provider);
136+
CScript append_script{bytes.begin(), bytes.end()};
137+
append_script << fuzzed_data_provider.ConsumeIntegral<int64_t>();
138+
append_script << ConsumeOpcodeType(fuzzed_data_provider);
139+
append_script << CScriptNum{fuzzed_data_provider.ConsumeIntegral<int64_t>()};
140+
append_script << ConsumeRandomLengthByteVector(fuzzed_data_provider);
141+
}
142+
143+
{
144+
WitnessUnknown witness_unknown_1{};
145+
witness_unknown_1.version = fuzzed_data_provider.ConsumeIntegral<int>();
146+
const std::vector<uint8_t> witness_unknown_program_1 = fuzzed_data_provider.ConsumeBytes<uint8_t>(40);
147+
witness_unknown_1.length = witness_unknown_program_1.size();
148+
std::copy(witness_unknown_program_1.begin(), witness_unknown_program_1.end(), witness_unknown_1.program);
149+
150+
WitnessUnknown witness_unknown_2{};
151+
witness_unknown_2.version = fuzzed_data_provider.ConsumeIntegral<int>();
152+
const std::vector<uint8_t> witness_unknown_program_2 = fuzzed_data_provider.ConsumeBytes<uint8_t>(40);
153+
witness_unknown_2.length = witness_unknown_program_2.size();
154+
std::copy(witness_unknown_program_2.begin(), witness_unknown_program_2.end(), witness_unknown_2.program);
155+
156+
(void)(witness_unknown_1 == witness_unknown_2);
157+
(void)(witness_unknown_1 < witness_unknown_2);
158+
}
159+
160+
{
161+
const CTxDestination tx_destination_1 = ConsumeTxDestination(fuzzed_data_provider);
162+
const CTxDestination tx_destination_2 = ConsumeTxDestination(fuzzed_data_provider);
163+
(void)(tx_destination_1 == tx_destination_2);
164+
(void)(tx_destination_1 < tx_destination_2);
165+
}
127166
}

src/test/fuzz/string.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <rpc/server.h>
1313
#include <rpc/util.h>
1414
#include <script/descriptor.h>
15+
#include <script/script.h>
1516
#include <serialize.h>
1617
#include <streams.h>
1718
#include <test/fuzz/FuzzedDataProvider.h>
@@ -89,6 +90,10 @@ void test_one_input(const std::vector<uint8_t>& buffer)
8990
(void)urlDecode(random_string_1);
9091
(void)ValidAsCString(random_string_1);
9192
(void)_(random_string_1.c_str());
93+
try {
94+
throw scriptnum_error{random_string_1};
95+
} catch (const std::runtime_error&) {
96+
}
9297

9398
{
9499
CDataStream data_stream{SER_NETWORK, INIT_PROTO_VERSION};

0 commit comments

Comments
 (0)