LCOV - code coverage report
Current view: top level - src/script - script.cpp (source / functions) Coverage Total Hit
Test: fuzz_coverage.info Lines: 100.0 % 242 242
Test Date: 2026-06-13 06:51:50 Functions: 100.0 % 17 17
Branches: 95.7 % 346 331

             Branch data     Line data    Source code
       1                 :             : // Copyright (c) 2009-2010 Satoshi Nakamoto
       2                 :             : // Copyright (c) 2009-present The Bitcoin Core developers
       3                 :             : // Distributed under the MIT software license, see the accompanying
       4                 :             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5                 :             : 
       6                 :             : #include <script/script.h>
       7                 :             : 
       8                 :             : #include <crypto/common.h>
       9                 :             : #include <crypto/hex_base.h>
      10                 :             : #include <hash.h>
      11                 :             : #include <uint256.h>
      12                 :             : #include <util/hash_type.h>
      13                 :             : 
      14                 :             : #include <compare>
      15                 :             : #include <string>
      16                 :             : 
      17                 :      296167 : CScriptID::CScriptID(const CScript& in) : BaseHash(Hash160(in)) {}
      18                 :             : 
      19                 :    11505618 : std::string GetOpName(opcodetype opcode)
      20                 :             : {
      21   [ +  +  +  +  :    11505618 :     switch (opcode)
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
             +  +  +  +  
                      + ]
      22                 :             :     {
      23                 :             :     // push value
      24                 :        1407 :     case OP_0                      : return "0";
      25                 :           2 :     case OP_PUSHDATA1              : return "OP_PUSHDATA1";
      26                 :           3 :     case OP_PUSHDATA2              : return "OP_PUSHDATA2";
      27                 :           3 :     case OP_PUSHDATA4              : return "OP_PUSHDATA4";
      28                 :       12896 :     case OP_1NEGATE                : return "-1";
      29                 :      111333 :     case OP_RESERVED               : return "OP_RESERVED";
      30                 :      224580 :     case OP_1                      : return "1";
      31                 :      160132 :     case OP_2                      : return "2";
      32                 :       62297 :     case OP_3                      : return "3";
      33                 :       22819 :     case OP_4                      : return "4";
      34                 :       23110 :     case OP_5                      : return "5";
      35                 :       11844 :     case OP_6                      : return "6";
      36                 :       18464 :     case OP_7                      : return "7";
      37                 :      129647 :     case OP_8                      : return "8";
      38                 :       23837 :     case OP_9                      : return "9";
      39                 :       14897 :     case OP_10                     : return "10";
      40                 :      103113 :     case OP_11                     : return "11";
      41                 :       15763 :     case OP_12                     : return "12";
      42                 :       53029 :     case OP_13                     : return "13";
      43                 :       14763 :     case OP_14                     : return "14";
      44                 :       29601 :     case OP_15                     : return "15";
      45                 :       14905 :     case OP_16                     : return "16";
      46                 :             : 
      47                 :             :     // control
      48                 :     1277103 :     case OP_NOP                    : return "OP_NOP";
      49                 :       15545 :     case OP_VER                    : return "OP_VER";
      50                 :       31216 :     case OP_IF                     : return "OP_IF";
      51                 :       24956 :     case OP_NOTIF                  : return "OP_NOTIF";
      52                 :       34683 :     case OP_VERIF                  : return "OP_VERIF";
      53                 :       35996 :     case OP_VERNOTIF               : return "OP_VERNOTIF";
      54                 :      186310 :     case OP_ELSE                   : return "OP_ELSE";
      55                 :       41934 :     case OP_ENDIF                  : return "OP_ENDIF";
      56                 :       76428 :     case OP_VERIFY                 : return "OP_VERIFY";
      57                 :      115687 :     case OP_RETURN                 : return "OP_RETURN";
      58                 :             : 
      59                 :             :     // stack ops
      60                 :       39782 :     case OP_TOALTSTACK             : return "OP_TOALTSTACK";
      61                 :       27903 :     case OP_FROMALTSTACK           : return "OP_FROMALTSTACK";
      62                 :       18269 :     case OP_2DROP                  : return "OP_2DROP";
      63                 :       13846 :     case OP_2DUP                   : return "OP_2DUP";
      64                 :       49387 :     case OP_3DUP                   : return "OP_3DUP";
      65                 :       23142 :     case OP_2OVER                  : return "OP_2OVER";
      66                 :       13838 :     case OP_2ROT                   : return "OP_2ROT";
      67                 :       37958 :     case OP_2SWAP                  : return "OP_2SWAP";
      68                 :       35464 :     case OP_IFDUP                  : return "OP_IFDUP";
      69                 :       33238 :     case OP_DEPTH                  : return "OP_DEPTH";
      70                 :       20240 :     case OP_DROP                   : return "OP_DROP";
      71                 :       43751 :     case OP_DUP                    : return "OP_DUP";
      72                 :      161363 :     case OP_NIP                    : return "OP_NIP";
      73                 :       17888 :     case OP_OVER                   : return "OP_OVER";
      74                 :       18592 :     case OP_PICK                   : return "OP_PICK";
      75                 :       21320 :     case OP_ROLL                   : return "OP_ROLL";
      76                 :       50322 :     case OP_ROT                    : return "OP_ROT";
      77                 :      363808 :     case OP_SWAP                   : return "OP_SWAP";
      78                 :       17495 :     case OP_TUCK                   : return "OP_TUCK";
      79                 :             : 
      80                 :             :     // splice ops
      81                 :       18582 :     case OP_CAT                    : return "OP_CAT";
      82                 :      212808 :     case OP_SUBSTR                 : return "OP_SUBSTR";
      83                 :       52516 :     case OP_LEFT                   : return "OP_LEFT";
      84                 :       21941 :     case OP_RIGHT                  : return "OP_RIGHT";
      85                 :       15327 :     case OP_SIZE                   : return "OP_SIZE";
      86                 :             : 
      87                 :             :     // bit logic
      88                 :       35533 :     case OP_INVERT                 : return "OP_INVERT";
      89                 :       36869 :     case OP_AND                    : return "OP_AND";
      90                 :       18473 :     case OP_OR                     : return "OP_OR";
      91                 :       16362 :     case OP_XOR                    : return "OP_XOR";
      92                 :      185639 :     case OP_EQUAL                  : return "OP_EQUAL";
      93                 :       42621 :     case OP_EQUALVERIFY            : return "OP_EQUALVERIFY";
      94                 :       20104 :     case OP_RESERVED1              : return "OP_RESERVED1";
      95                 :       18147 :     case OP_RESERVED2              : return "OP_RESERVED2";
      96                 :             : 
      97                 :             :     // numeric
      98                 :       18037 :     case OP_1ADD                   : return "OP_1ADD";
      99                 :       15647 :     case OP_1SUB                   : return "OP_1SUB";
     100                 :       23995 :     case OP_2MUL                   : return "OP_2MUL";
     101                 :       12528 :     case OP_2DIV                   : return "OP_2DIV";
     102                 :       25578 :     case OP_NEGATE                 : return "OP_NEGATE";
     103                 :       14072 :     case OP_ABS                    : return "OP_ABS";
     104                 :       18302 :     case OP_NOT                    : return "OP_NOT";
     105                 :      133750 :     case OP_0NOTEQUAL              : return "OP_0NOTEQUAL";
     106                 :       16524 :     case OP_ADD                    : return "OP_ADD";
     107                 :       12515 :     case OP_SUB                    : return "OP_SUB";
     108                 :       20045 :     case OP_MUL                    : return "OP_MUL";
     109                 :       77326 :     case OP_DIV                    : return "OP_DIV";
     110                 :       19758 :     case OP_MOD                    : return "OP_MOD";
     111                 :       53679 :     case OP_LSHIFT                 : return "OP_LSHIFT";
     112                 :       39675 :     case OP_RSHIFT                 : return "OP_RSHIFT";
     113                 :       56920 :     case OP_BOOLAND                : return "OP_BOOLAND";
     114                 :       20389 :     case OP_BOOLOR                 : return "OP_BOOLOR";
     115                 :       49674 :     case OP_NUMEQUAL               : return "OP_NUMEQUAL";
     116                 :       16070 :     case OP_NUMEQUALVERIFY         : return "OP_NUMEQUALVERIFY";
     117                 :       21698 :     case OP_NUMNOTEQUAL            : return "OP_NUMNOTEQUAL";
     118                 :       26057 :     case OP_LESSTHAN               : return "OP_LESSTHAN";
     119                 :       14137 :     case OP_GREATERTHAN            : return "OP_GREATERTHAN";
     120                 :      861180 :     case OP_LESSTHANOREQUAL        : return "OP_LESSTHANOREQUAL";
     121                 :       57208 :     case OP_GREATERTHANOREQUAL     : return "OP_GREATERTHANOREQUAL";
     122                 :       23103 :     case OP_MIN                    : return "OP_MIN";
     123                 :      117112 :     case OP_MAX                    : return "OP_MAX";
     124                 :       30661 :     case OP_WITHIN                 : return "OP_WITHIN";
     125                 :             : 
     126                 :             :     // crypto
     127                 :       18841 :     case OP_RIPEMD160              : return "OP_RIPEMD160";
     128                 :       26331 :     case OP_SHA1                   : return "OP_SHA1";
     129                 :       17586 :     case OP_SHA256                 : return "OP_SHA256";
     130                 :      199029 :     case OP_HASH160                : return "OP_HASH160";
     131                 :       16268 :     case OP_HASH256                : return "OP_HASH256";
     132                 :       28492 :     case OP_CODESEPARATOR          : return "OP_CODESEPARATOR";
     133                 :      130830 :     case OP_CHECKSIG               : return "OP_CHECKSIG";
     134                 :       40124 :     case OP_CHECKSIGVERIFY         : return "OP_CHECKSIGVERIFY";
     135                 :     1199202 :     case OP_CHECKMULTISIG          : return "OP_CHECKMULTISIG";
     136                 :      115130 :     case OP_CHECKMULTISIGVERIFY    : return "OP_CHECKMULTISIGVERIFY";
     137                 :             : 
     138                 :             :     // expansion
     139                 :       30558 :     case OP_NOP1                   : return "OP_NOP1";
     140                 :      486684 :     case OP_CHECKLOCKTIMEVERIFY    : return "OP_CHECKLOCKTIMEVERIFY";
     141                 :       86518 :     case OP_CHECKSEQUENCEVERIFY    : return "OP_CHECKSEQUENCEVERIFY";
     142                 :       19332 :     case OP_NOP4                   : return "OP_NOP4";
     143                 :       63091 :     case OP_NOP5                   : return "OP_NOP5";
     144                 :       14525 :     case OP_NOP6                   : return "OP_NOP6";
     145                 :       18450 :     case OP_NOP7                   : return "OP_NOP7";
     146                 :       23210 :     case OP_NOP8                   : return "OP_NOP8";
     147                 :       15113 :     case OP_NOP9                   : return "OP_NOP9";
     148                 :       22758 :     case OP_NOP10                  : return "OP_NOP10";
     149                 :             : 
     150                 :             :     // Opcode added by BIP 342 (Tapscript)
     151                 :       30941 :     case OP_CHECKSIGADD            : return "OP_CHECKSIGADD";
     152                 :             : 
     153                 :      243370 :     case OP_INVALIDOPCODE          : return "OP_INVALIDOPCODE";
     154                 :             : 
     155                 :             :     } // no default case, so the compiler can warn about missing cases
     156                 :     2272764 :     return "OP_UNKNOWN";
     157                 :             : }
     158                 :             : 
     159                 :    34287059 : unsigned int CScript::GetSigOpCount(bool fAccurate) const
     160                 :             : {
     161                 :    34287059 :     unsigned int n = 0;
     162         [ +  + ]:    34287059 :     const_iterator pc = begin();
     163                 :    34287059 :     opcodetype lastOpcode = OP_INVALIDOPCODE;
     164   [ +  +  +  + ]:   355569746 :     while (pc < end())
     165                 :             :     {
     166                 :   144153009 :         opcodetype opcode;
     167         [ +  + ]:   144153009 :         if (!GetOp(pc, opcode))
     168                 :             :             break;
     169         [ +  + ]:   143497814 :         if (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY)
     170                 :      677846 :             n++;
     171         [ +  + ]:   142819968 :         else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY)
     172                 :             :         {
     173   [ +  +  +  + ]:      965377 :             if (fAccurate && lastOpcode >= OP_1 && lastOpcode <= OP_16)
     174                 :        6688 :                 n += DecodeOP_N(lastOpcode);
     175                 :             :             else
     176                 :      958689 :                 n += MAX_PUBKEYS_PER_MULTISIG;
     177                 :             :         }
     178                 :             :         lastOpcode = opcode;
     179                 :             :     }
     180                 :    34287059 :     return n;
     181                 :             : }
     182                 :             : 
     183                 :     2761377 : unsigned int CScript::GetSigOpCount(const CScript& scriptSig) const
     184                 :             : {
     185         [ +  + ]:     2761377 :     if (!IsPayToScriptHash())
     186                 :     2754558 :         return GetSigOpCount(true);
     187                 :             : 
     188                 :             :     // This is a pay-to-script-hash scriptPubKey;
     189                 :             :     // get the last item that the scriptSig
     190                 :             :     // pushes onto the stack:
     191         [ +  + ]:        6819 :     const_iterator pc = scriptSig.begin();
     192                 :        6819 :     std::vector<unsigned char> vData;
     193   [ +  +  +  + ]:      144594 :     while (pc < scriptSig.end())
     194                 :             :     {
     195                 :       71270 :         opcodetype opcode;
     196   [ +  -  +  + ]:       71270 :         if (!scriptSig.GetOp(pc, opcode, vData))
     197                 :             :             return 0;
     198         [ +  + ]:       70005 :         if (opcode > OP_16)
     199                 :             :             return 0;
     200                 :             :     }
     201                 :             : 
     202                 :             :     /// ... and return its opcount:
     203                 :        1027 :     CScript subscript(vData.begin(), vData.end());
     204         [ +  - ]:        1027 :     return subscript.GetSigOpCount(true);
     205                 :        7846 : }
     206                 :             : 
     207                 :     2658983 : bool CScript::IsPayToAnchor() const
     208                 :             : {
     209         [ +  + ]:     2658983 :     return (this->size() == 4 &&
     210   [ +  +  +  + ]:      196144 :         (*this)[0] == OP_1 &&
     211   [ +  +  +  + ]:       21274 :         (*this)[1] == 0x02 &&
     212   [ +  +  +  +  :     2680247 :         (*this)[2] == 0x4e &&
                   +  + ]
     213   [ +  +  +  + ]:       10276 :         (*this)[3] == 0x73);
     214                 :             : }
     215                 :             : 
     216                 :       32744 : bool CScript::IsPayToAnchor(int version, const std::vector<unsigned char>& program)
     217                 :             : {
     218                 :       41567 :     return version == 1 &&
     219         [ +  + ]:        8823 :         program.size() == 2 &&
     220   [ +  +  +  + ]:       38266 :         program[0] == 0x4e &&
     221         [ +  + ]:        3257 :         program[1] == 0x73;
     222                 :             : }
     223                 :             : 
     224                 :    31698736 : bool CScript::IsPayToScriptHash() const
     225                 :             : {
     226                 :             :     // Extra-fast test for pay-to-script-hash CScripts:
     227         [ +  + ]:    31698736 :     return (this->size() == 23 &&
     228   [ +  +  +  + ]:     1912078 :             (*this)[0] == OP_HASH160 &&
     229   [ +  +  +  +  :    33546292 :             (*this)[1] == 0x14 &&
                   +  + ]
     230   [ +  +  +  + ]:     1832038 :             (*this)[22] == OP_EQUAL);
     231                 :             : }
     232                 :             : 
     233                 :       19951 : bool CScript::IsPayToWitnessScriptHash() const
     234                 :             : {
     235                 :             :     // Extra-fast test for pay-to-witness-script-hash CScripts:
     236         [ +  + ]:       19951 :     return (this->size() == 34 &&
     237   [ +  +  +  +  :       26826 :             (*this)[0] == OP_0 &&
                   +  + ]
     238   [ +  +  +  + ]:       13722 :             (*this)[1] == 0x20);
     239                 :             : }
     240                 :             : 
     241                 :       42034 : bool CScript::IsPayToTaproot() const
     242                 :             : {
     243         [ +  + ]:       42034 :     return (this->size() == 34 &&
     244   [ +  +  +  -  :       52062 :             (*this)[0] == OP_1 &&
                   +  + ]
     245   [ +  -  +  + ]:       17050 :             (*this)[1] == 0x20);
     246                 :             : }
     247                 :             : 
     248                 :             : // A witness program is any valid CScript that consists of a 1-byte push opcode
     249                 :             : // followed by a data push between 2 and 40 bytes.
     250                 :   103383404 : bool CScript::IsWitnessProgram(int& version, std::vector<unsigned char>& program) const
     251                 :             : {
     252   [ +  +  +  +  :   104752655 :     if (this->size() < 4 || this->size() > 42) {
             +  +  +  + ]
     253                 :             :         return false;
     254                 :             :     }
     255   [ +  +  +  +  :   196716176 :     if ((*this)[0] != OP_0 && ((*this)[0] < OP_1 || (*this)[0] > OP_16)) {
             +  +  +  + ]
     256                 :             :         return false;
     257                 :             :     }
     258   [ +  +  +  + ]:   193849706 :     if ((size_t)((*this)[1] + 2) == this->size()) {
     259                 :    96800894 :         version = DecodeOP_N((opcodetype)(*this)[0]);
     260         [ +  + ]:   290402682 :         program = std::vector<unsigned char>(this->begin() + 2, this->end());
     261                 :    96800894 :         return true;
     262                 :             :     }
     263                 :             :     return false;
     264                 :             : }
     265                 :             : 
     266                 :     8679381 : bool CScript::IsPushOnly(const_iterator pc) const
     267                 :             : {
     268   [ +  +  +  + ]:    44826748 :     while (pc < end())
     269                 :             :     {
     270                 :    13824621 :         opcodetype opcode;
     271         [ +  + ]:    13824621 :         if (!GetOp(pc, opcode))
     272                 :             :             return false;
     273                 :             :         // Note that IsPushOnly() *does* consider OP_RESERVED to be a
     274                 :             :         // push-type opcode, however execution of OP_RESERVED fails, so
     275                 :             :         // it's not relevant to P2SH/BIP62 as the scriptSig would fail prior to
     276                 :             :         // the P2SH special validation code being executed.
     277         [ +  + ]:    13781585 :         if (opcode > OP_16)
     278                 :             :             return false;
     279                 :             :     }
     280                 :             :     return true;
     281                 :             : }
     282                 :             : 
     283                 :     8600141 : bool CScript::IsPushOnly() const
     284                 :             : {
     285         [ +  + ]:    17200282 :     return this->IsPushOnly(begin());
     286                 :             : }
     287                 :             : 
     288                 :     1386712 : std::string CScriptWitness::ToString() const
     289                 :             : {
     290                 :     1386712 :     std::string ret = "CScriptWitness(";
     291   [ -  +  +  + ]:    11409833 :     for (unsigned int i = 0; i < stack.size(); i++) {
     292         [ +  + ]:    10023121 :         if (i) {
     293         [ +  - ]:     9980658 :             ret += ", ";
     294                 :             :         }
     295   [ -  +  +  - ]:    20046242 :         ret += HexStr(stack[i]);
     296                 :             :     }
     297         [ +  - ]:     1386712 :     return ret + ")";
     298                 :     1386712 : }
     299                 :             : 
     300                 :      965798 : bool CScript::HasValidOps() const
     301                 :             : {
     302         [ +  + ]:      965798 :     CScript::const_iterator it = begin();
     303   [ +  +  +  + ]:    10916270 :     while (it < end()) {
     304                 :     4497972 :         opcodetype opcode;
     305                 :     4497972 :         std::vector<unsigned char> item;
     306   [ +  -  +  +  :     8990342 :         if (!GetOp(it, opcode, item) || opcode > MAX_OPCODE || item.size() > MAX_SCRIPT_ELEMENT_SIZE) {
             +  +  +  + ]
     307                 :        5635 :             return false;
     308                 :             :         }
     309                 :     4497972 :     }
     310                 :             :     return true;
     311                 :             : }
     312                 :             : 
     313                 :   629693743 : bool GetScriptOp(CScriptBase::const_iterator& pc, CScriptBase::const_iterator end, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet)
     314                 :             : {
     315                 :   629693743 :     opcodeRet = OP_INVALIDOPCODE;
     316         [ +  + ]:   629693743 :     if (pvchRet)
     317         [ +  + ]:   102350436 :         pvchRet->clear();
     318   [ +  +  +  + ]:  1259387486 :     if (pc >= end)
     319                 :             :         return false;
     320                 :             : 
     321                 :             :     // Read instruction
     322         [ +  - ]:   629168508 :     if (end - pc < 1)
     323                 :             :         return false;
     324         [ +  + ]:   629168508 :     unsigned int opcode = *pc++;
     325                 :             : 
     326                 :             :     // Immediate operand
     327         [ +  + ]:   629168508 :     if (opcode <= OP_PUSHDATA4)
     328                 :             :     {
     329                 :   214037870 :         unsigned int nSize = 0;
     330         [ +  + ]:   214037870 :         if (opcode < OP_PUSHDATA1)
     331                 :             :         {
     332                 :             :             nSize = opcode;
     333                 :             :         }
     334         [ +  + ]:    72090912 :         else if (opcode == OP_PUSHDATA1)
     335                 :             :         {
     336         [ +  + ]:    71197697 :             if (end - pc < 1)
     337                 :             :                 return false;
     338                 :    71181859 :             nSize = *pc++;
     339                 :             :         }
     340         [ +  + ]:      893215 :         else if (opcode == OP_PUSHDATA2)
     341                 :             :         {
     342         [ +  + ]:      530974 :             if (end - pc < 2)
     343                 :             :                 return false;
     344                 :      507326 :             nSize = ReadLE16(&pc[0]);
     345                 :      507326 :             pc += 2;
     346                 :             :         }
     347         [ +  - ]:      362241 :         else if (opcode == OP_PUSHDATA4)
     348                 :             :         {
     349         [ +  + ]:      362241 :             if (end - pc < 4)
     350                 :             :                 return false;
     351                 :      343634 :             nSize = ReadLE32(&pc[0]);
     352                 :      343634 :             pc += 4;
     353                 :             :         }
     354   [ +  -  +  + ]:   213979777 :         if (end - pc < 0 || (unsigned int)(end - pc) < nSize)
     355                 :     1999714 :             return false;
     356         [ +  + ]:   211980063 :         if (pvchRet)
     357                 :    46588123 :             pvchRet->assign(pc, pc + nSize);
     358                 :   211980063 :         pc += nSize;
     359                 :             :     }
     360                 :             : 
     361                 :   627110701 :     opcodeRet = static_cast<opcodetype>(opcode);
     362                 :   627110701 :     return true;
     363                 :             : }
     364                 :             : 
     365                 :     1028923 : bool IsOpSuccess(const opcodetype& opcode)
     366                 :             : {
     367   [ +  +  +  + ]:     1028899 :     return opcode == 80 || opcode == 98 || (opcode >= 126 && opcode <= 129) ||
     368   [ +  +  +  + ]:     1028875 :            (opcode >= 131 && opcode <= 134) || (opcode >= 137 && opcode <= 138) ||
     369   [ +  +  +  +  :     2057746 :            (opcode >= 141 && opcode <= 142) || (opcode >= 149 && opcode <= 153) ||
                   +  + ]
     370         [ +  + ]:     1028792 :            (opcode >= 187 && opcode <= 254);
     371                 :             : }
     372                 :             : 
     373                 :    17450745 : bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode) {
     374                 :             :     // Excludes OP_1NEGATE, OP_1-16 since they are by definition minimal
     375         [ -  + ]:    17450745 :     assert(0 <= opcode && opcode <= OP_PUSHDATA4);
     376   [ -  +  +  + ]:    17450745 :     if (data.size() == 0) {
     377                 :             :         // Should have used OP_0.
     378                 :    14202429 :         return opcode == OP_0;
     379   [ +  +  +  +  :     3248316 :     } else if (data.size() == 1 && data[0] >= 1 && data[0] <= 16) {
                   +  + ]
     380                 :             :         // Should have used OP_1 .. OP_16.
     381                 :             :         return false;
     382   [ +  +  +  + ]:     3236785 :     } else if (data.size() == 1 && data[0] == 0x81) {
     383                 :             :         // Should have used OP_1NEGATE.
     384                 :             :         return false;
     385         [ +  + ]:     3234136 :     } else if (data.size() <= 75) {
     386                 :             :         // Must have used a direct push (opcode indicating number of bytes pushed + those bytes).
     387                 :     3188079 :         return opcode == data.size();
     388         [ +  + ]:       46057 :     } else if (data.size() <= 255) {
     389                 :             :         // Must have used OP_PUSHDATA.
     390                 :       26093 :         return opcode == OP_PUSHDATA1;
     391         [ +  + ]:       19964 :     } else if (data.size() <= 65535) {
     392                 :             :         // Must have used OP_PUSHDATA2.
     393                 :       19924 :         return opcode == OP_PUSHDATA2;
     394                 :             :     }
     395                 :             :     return true;
     396                 :             : }
        

Generated by: LCOV version 2.0-1