Very quick fix to avoid STOP instructions to return random values (#792)
This commit is contained in:
@@ -1213,6 +1213,7 @@ class ManticoreEVM(Manticore):
|
||||
signature = metadata.get_func_signature(function_id)
|
||||
function_name, arguments = ABI.parse(signature, tx.data)
|
||||
|
||||
return_data = None
|
||||
if tx.result == 'RETURN':
|
||||
ret_types = metadata.get_func_return_types(function_id)
|
||||
return_data = ABI.parse(ret_types, tx.return_data) #function return
|
||||
@@ -1224,13 +1225,15 @@ class ManticoreEVM(Manticore):
|
||||
is_argument_symbolic = any(map(issymbolic, arguments))
|
||||
is_something_symbolic = is_something_symbolic or is_argument_symbolic
|
||||
tx_summary.write(') -> %s %s\n' % ( tx.result, flagged(is_argument_symbolic)))
|
||||
is_return_symbolic = any(map(issymbolic, return_data))
|
||||
return_values = tuple(map(state.solve_one, return_data))
|
||||
if len(return_values) == 1:
|
||||
return_values = return_values[0]
|
||||
|
||||
tx_summary.write('return: %r %s\n' % ( return_values, flagged(is_return_symbolic)))
|
||||
is_something_symbolic = is_something_symbolic or is_return_symbolic
|
||||
if return_data is not None:
|
||||
is_return_symbolic = any(map(issymbolic, return_data))
|
||||
return_values = tuple(map(state.solve_one, return_data))
|
||||
if len(return_values) == 1:
|
||||
return_values = return_values[0]
|
||||
|
||||
tx_summary.write('return: %r %s\n' % ( return_values, flagged(is_return_symbolic)))
|
||||
is_something_symbolic = is_something_symbolic or is_return_symbolic
|
||||
|
||||
|
||||
tx_summary.write('\n\n')
|
||||
|
||||
Reference in New Issue
Block a user