aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2014-10-25 05:24:14 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2014-11-25 12:35:32 +0100
commitae4151bbad74ab54de818d7704fa4568ee65e40d (patch)
treed5b7988524b78c41f6b060c6c376bd28fc9b3ca3 /src/script
parent397b9011c9b88ccf623f798a4925228c30813530 (diff)
downloadbitcoin-ae4151bbad74ab54de818d7704fa4568ee65e40d.tar.xz
No semantic change: reuse stack variable in P2SH evaluation
Diffstat (limited to 'src/script')
-rw-r--r--src/script/interpreter.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp
index 5eda23731d..d97f917c37 100644
--- a/src/script/interpreter.cpp
+++ b/src/script/interpreter.cpp
@@ -1107,21 +1107,24 @@ bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, unsigne
if (!scriptSig.IsPushOnly())
return set_error(serror, SCRIPT_ERR_SIG_PUSHONLY);
- // stackCopy cannot be empty here, because if it was the
+ // Restore stack.
+ swap(stack, stackCopy);
+
+ // stack cannot be empty here, because if it was the
// P2SH HASH <> EQUAL scriptPubKey would be evaluated with
// an empty stack and the EvalScript above would return false.
- assert(!stackCopy.empty());
+ assert(!stack.empty());
- const valtype& pubKeySerialized = stackCopy.back();
+ const valtype& pubKeySerialized = stack.back();
CScript pubKey2(pubKeySerialized.begin(), pubKeySerialized.end());
- popstack(stackCopy);
+ popstack(stack);
- if (!EvalScript(stackCopy, pubKey2, flags, checker, serror))
+ if (!EvalScript(stack, pubKey2, flags, checker, serror))
// serror is set
return false;
- if (stackCopy.empty())
+ if (stack.empty())
return set_error(serror, SCRIPT_ERR_EVAL_FALSE);
- if (!CastToBool(stackCopy.back()))
+ if (!CastToBool(stack.back()))
return set_error(serror, SCRIPT_ERR_EVAL_FALSE);
else
return set_success(serror);