Skip to content

Commit

Permalink
Merge pull request #240 from ethereumjs/cleanup-opfns
Browse files Browse the repository at this point in the history
Restrict direct stack usage in opfns
  • Loading branch information
axic committed Dec 17, 2017
2 parents d1ba323 + 86308eb commit 9e63cd3
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions lib/opFns.js
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,8 @@ module.exports = {
return loaded
},
DUP: function (runState) {
// NOTE: this function manipulates the stack directly!

const stackPos = runState.opCode - 0x7f
if (stackPos > runState.stack.length) {
trap(ERROR.STACK_UNDERFLOW)
Expand All @@ -478,6 +480,8 @@ module.exports = {
return runState.stack[runState.stack.length - stackPos]
},
SWAP: function (runState) {
// NOTE: this function manipulates the stack directly!

var stackPos = runState.opCode - 0x8f

// check the stack to make sure we have enough items on teh stack
Expand All @@ -487,9 +491,10 @@ module.exports = {
}

// preform the swap
var newTop = runState.stack[swapIndex]
runState.stack[swapIndex] = runState.stack.pop()
return newTop
var topIndex = runState.stack.length - 1
var tmp = runState.stack[topIndex]
runState.stack[topIndex] = runState.stack[swapIndex]
runState.stack[swapIndex] = tmp
},
LOG: function (memOffset, memLength) {
var args = Array.prototype.slice.call(arguments, 0)
Expand Down Expand Up @@ -1023,8 +1028,7 @@ function makeCall (runState, callOptions, localOpts, cb) {
// check if account has enough ether
// Note: in the case of delegatecall, the value is persisted and doesn't need to be deducted again
if (runState.depth >= fees.stackLimit.v || (callOptions.delegatecall !== true && new BN(runState.contract.balance).lt(callOptions.value))) {
runState.stack.push(Buffer.from([0]))
cb(null)
cb(null, Buffer.from([0]))
} else {
// if creating a new contract then increament the nonce
if (!callOptions.to) {
Expand Down

0 comments on commit 9e63cd3

Please sign in to comment.