From fbf0823cb61aa7f3b417839a4e2e7e3f58352f10 Mon Sep 17 00:00:00 2001 From: ggrieco-tob <31542053+ggrieco-tob@users.noreply.github.com> Date: Wed, 7 Mar 2018 14:57:59 -0300 Subject: [PATCH] Very quick fix to avoid STOP instructions to return random values (#792) --- manticore/ethereum.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/manticore/ethereum.py b/manticore/ethereum.py index ec77cd6..e36e0ad 100644 --- a/manticore/ethereum.py +++ b/manticore/ethereum.py @@ -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')