Line data Source code
1 : // Copyright (c) 2020-2021 The Bitcoin Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #include <script/script.h> 6 : #include <test/fuzz/FuzzedDataProvider.h> 7 : #include <test/fuzz/fuzz.h> 8 : #include <test/fuzz/util.h> 9 : 10 : #include <cstdint> 11 : #include <string> 12 : #include <vector> 13 : 14 4 : FUZZ_TARGET(script_ops) 15 : { 16 0 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); 17 0 : CScript script_mut = ConsumeScript(fuzzed_data_provider); 18 0 : LIMITED_WHILE(fuzzed_data_provider.remaining_bytes() > 0, 1000000) { 19 0 : CallOneOf( 20 : fuzzed_data_provider, 21 0 : [&] { 22 0 : CScript s = ConsumeScript(fuzzed_data_provider); 23 0 : script_mut = std::move(s); 24 0 : }, 25 2 : [&] { 26 0 : const CScript& s = ConsumeScript(fuzzed_data_provider); 27 0 : script_mut = s; 28 0 : }, 29 0 : [&] { 30 0 : script_mut << fuzzed_data_provider.ConsumeIntegral<int64_t>(); 31 0 : }, 32 0 : [&] { 33 0 : script_mut << ConsumeOpcodeType(fuzzed_data_provider); 34 0 : }, 35 0 : [&] { 36 0 : script_mut << ConsumeScriptNum(fuzzed_data_provider); 37 0 : }, 38 0 : [&] { 39 0 : script_mut << ConsumeRandomLengthByteVector(fuzzed_data_provider); 40 0 : }, 41 0 : [&] { 42 0 : script_mut.clear(); 43 0 : }); 44 0 : } 45 0 : const CScript& script = script_mut; 46 0 : (void)script.GetSigOpCount(false); 47 0 : (void)script.GetSigOpCount(true); 48 0 : (void)script.GetSigOpCount(script); 49 0 : (void)script.HasValidOps(); 50 0 : (void)script.IsPayToScriptHash(); 51 0 : (void)script.IsPayToWitnessScriptHash(); 52 0 : (void)script.IsPushOnly(); 53 0 : (void)script.IsUnspendable(); 54 : { 55 0 : CScript::const_iterator pc = script.begin(); 56 : opcodetype opcode; 57 0 : (void)script.GetOp(pc, opcode); 58 0 : std::vector<uint8_t> data; 59 0 : (void)script.GetOp(pc, opcode, data); 60 0 : (void)script.IsPushOnly(pc); 61 0 : } 62 : { 63 : int version; 64 0 : std::vector<uint8_t> program; 65 0 : (void)script.IsWitnessProgram(version, program); 66 0 : } 67 0 : }