Changed instructions out-of-bounds behavior to return halt instruction. (#1223)

pull/1225/head
e-ngo 5 years ago committed by Nikhil Parasaram
parent 75838e3a8d
commit 57068484c6
  1. 6
      mythril/laser/ethereum/evm_exceptions.py
  2. 12
      mythril/laser/ethereum/state/global_state.py

@ -41,9 +41,3 @@ class WriteProtection(VmException):
"""A VM exception denoting that a write operation is executed on a write protected environment"""
pass
class ProgramCounterException(VmException):
"""A VM exception denoting an invalid PC value (No stop instruction is reached)."""
pass

@ -9,7 +9,6 @@ from mythril.laser.ethereum.cfg import Node
from mythril.laser.ethereum.state.environment import Environment
from mythril.laser.ethereum.state.machine_state import MachineState
from mythril.laser.ethereum.state.annotation import StateAnnotation
from mythril.laser.ethereum.evm_exceptions import ProgramCounterException
if TYPE_CHECKING:
from mythril.laser.ethereum.state.world_state import WorldState
@ -95,13 +94,12 @@ class GlobalState:
:return:
"""
instructions = self.environment.code.instruction_list
if self.mstate.pc >= len(instructions):
raise ProgramCounterException(
"PC: {} can not be reached.".format(self.mstate.pc)
)
return instructions[self.mstate.pc]
try:
return instructions[self.mstate.pc]
except KeyError:
new_instruction = {"address": self.mstate.pc, "opcode": "STOP"}
return new_instruction
@property
def current_transaction(

Loading…
Cancel
Save