Test ScriptSigArgsExpected() for error, before accumulating return value
authorJeff Garzik <jgarzik@exmulti.com>
Sun, 22 Apr 2012 17:44:12 +0000 (13:44 -0400)
committerLuke Dashjr <luke-jr+git@utopios.org>
Tue, 24 Apr 2012 04:51:54 +0000 (00:51 -0400)
src/main.cpp

index 2473662..1bb64a6 100644 (file)
@@ -304,6 +304,8 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const
         if (!Solver(prevScript, whichType, vSolutions))
             return false;
         int nArgsExpected = ScriptSigArgsExpected(whichType, vSolutions);
+        if (nArgsExpected < 0)
+            return false;
 
         // Transactions with extra stuff in their scriptSigs are
         // non-standard. Note that this EvalScript() call will
@@ -325,10 +327,15 @@ bool CTransaction::AreInputsStandard(const MapPrevTx& mapInputs) const
                 return false;
             if (whichType2 == TX_SCRIPTHASH)
                 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;
     }