Skip to content

Commit 2a7e913

Browse files
committed
core/vm: Check for interpreter loop abort on every jump
1 parent 350b6ee commit 2a7e913

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

core/vm/instructions.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package vm
1818

1919
import (
20+
"sync/atomic"
21+
2022
"github.com/ethereum/go-ethereum/common"
2123
"github.com/ethereum/go-ethereum/core/types"
2224
"github.com/ethereum/go-ethereum/params"
@@ -525,6 +527,9 @@ func opSstore(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]b
525527
}
526528

527529
func opJump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
530+
if atomic.LoadInt32(&interpreter.evm.abort) != 0 {
531+
return nil, errStopToken
532+
}
528533
pos := scope.Stack.pop()
529534
if !scope.Contract.validJumpdest(&pos) {
530535
return nil, ErrInvalidJump
@@ -534,6 +539,9 @@ func opJump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt
534539
}
535540

536541
func opJumpi(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
542+
if atomic.LoadInt32(&interpreter.evm.abort) != 0 {
543+
return nil, errStopToken
544+
}
537545
pos, cond := scope.Stack.pop(), scope.Stack.pop()
538546
if !cond.IsZero() {
539547
if !scope.Contract.validJumpdest(&pos) {

0 commit comments

Comments
 (0)