@ -60,7 +60,7 @@ from mythril.laser.ethereum.transaction import (
ContractCreationTransaction ,
ContractCreationTransaction ,
tx_id_manager ,
tx_id_manager ,
)
)
from mythril . support . model import get_model
from mythril . support . support_utils import get_code_hash
from mythril . support . support_utils import get_code_hash
from mythril . support . loader import DynLoader
from mythril . support . loader import DynLoader
@ -1733,17 +1733,24 @@ class Instruction:
code_raw = [ ]
code_raw = [ ]
code_end = call_data . size
code_end = call_data . size
size = call_data . size
size = call_data . size
if isinstance ( size , BitVec ) :
if isinstance ( size , BitVec ) :
# Other size restriction checks handle this
# Other size restriction checks handle this
if size . symbolic :
if size . symbolic :
size = 10 * * 5
size = 10 * * 4
else :
else :
size = size . value
size = size . value
for i in range ( size ) :
code_raw = [ ]
if call_data [ i ] . symbolic :
constraints = global_state . world_state . constraints
code_end = i
model = get_model ( constraints )
break
if isinstance ( call_data , ConcreteCalldata ) :
code_raw . append ( call_data [ i ] . value )
for element in call_data . concrete ( model ) :
if isinstance ( element , BitVec ) and element . symbolic :
break
if isinstance ( element , BitVec ) :
code_raw . append ( element . value )
else :
code_raw . append ( element )
if len ( code_raw ) < 1 :
if len ( code_raw ) < 1 :
global_state . mstate . stack . append ( 1 )
global_state . mstate . stack . append ( 1 )
@ -1804,6 +1811,7 @@ class Instruction:
call_value = call_value ,
call_value = call_value ,
contract_address = contract_address ,
contract_address = contract_address ,
)
)
log . info ( " Raise transaction start signal " )
raise TransactionStartSignal ( transaction , self . op_code , global_state )
raise TransactionStartSignal ( transaction , self . op_code , global_state )
@StateTransition ( is_state_mutation_instruction = True )
@StateTransition ( is_state_mutation_instruction = True )