Browse Source

Test ScriptSigArgsExpected() for error, before accumulating return value

miguelfreitas
Jeff Garzik 13 years ago committed by Jeff Garzik
parent
commit
c0a0a93d02
  1. 11
      src/main.cpp

11
src/main.cpp

@ -297,6 +297,8 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const
if (!Solver(prevScript, whichType, vSolutions)) if (!Solver(prevScript, whichType, vSolutions))
return false; return false;
int nArgsExpected = ScriptSigArgsExpected(whichType, vSolutions); int nArgsExpected = ScriptSigArgsExpected(whichType, vSolutions);
if (nArgsExpected < 0)
return false;
// Transactions with extra stuff in their scriptSigs are // Transactions with extra stuff in their scriptSigs are
// non-standard. Note that this EvalScript() call will // non-standard. Note that this EvalScript() call will
@ -318,10 +320,15 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const
return false; return false;
if (whichType2 == TX_SCRIPTHASH) if (whichType2 == TX_SCRIPTHASH)
return false; return false;
nArgsExpected += ScriptSigArgsExpected(whichType2, vSolutions2);
int tmpExpected;
tmpExpected = ScriptSigArgsExpected(whichType2, vSolutions2);
if (tmpExpected < 0)
return false;
nArgsExpected += tmpExpected;
} }
if (stack.size() != nArgsExpected) if (stack.size() != (unsigned int)nArgsExpected)
return false; return false;
} }

Loading…
Cancel
Save