fkie-cad / dewolf

A research decompiler implemented as a Binary Ninja plugin.
GNU Lesser General Public License v2.1
176 stars 9 forks source link

[TypeError@expressions.py:189] TypeError: unhashable type: 'dict' #426

Open bugfinder-bot opened 2 months ago

bugfinder-bot commented 2 months ago

What happened?


  File "/opt/dewolf/decompiler/util/bugfinder/bugfinder.py", line 201, in iter_function_reports
    task, code = self.decompile(function, task_options=options)
  File "/opt/dewolf/decompile.py", line 80, in decompile
    result = self.decompile_all([function_id], task_options)
  File "/opt/dewolf/decompile.py", line 65, in decompile_all
    pipeline.run(task)
  File "/opt/dewolf/decompiler/pipeline/pipeline.py", line 114, in run
    raise e
  File "/opt/dewolf/decompiler/pipeline/pipeline.py", line 107, in run
    instance.run(task)
  File "/opt/dewolf/decompiler/pipeline/dataflowanalysis/common_subexpression_elimination.py", line 317, in run
    ExistingSubexpressionReplacer(task.graph, task.graph.dominator_tree).replace(task.graph.root)
  File "/opt/dewolf/decompiler/pipeline/dataflowanalysis/common_subexpression_elimination.py", line 125, in replace
    new_keys_list.append(self._replacements_for(current_node))
  File "/opt/dewolf/decompiler/pipeline/dataflowanalysis/common_subexpression_elimination.py", line 140, in _replacements_for
    sorted_subexpressions = sorted({expr for expr in _subexpression_dfs(instruction)}, key=lambda x: x.complexity)
  File "/opt/dewolf/decompiler/pipeline/dataflowanalysis/common_subexpression_elimination.py", line 140, in <setcomp>
    sorted_subexpressions = sorted({expr for expr in _subexpression_dfs(instruction)}, key=lambda x: x.complexity)
  File "/opt/dewolf/decompiler/structures/pseudo/expressions.py", line 575, in __hash__
    return super().__hash__()
  File "/opt/dewolf/decompiler/structures/pseudo/expressions.py", line 189, in __hash__
    return hash((tuple(self.value) if isinstance(self.value, list) else self.value, self._type, self._pointee))
  File "/opt/dewolf/decompiler/structures/pseudo/expressions.py", line 189, in __hash__
    return hash((tuple(self.value) if isinstance(self.value, list) else self.value, self._type, self._pointee))

Error class TypeError@expressions.py:189 contains 361 cases.

How to reproduce?

python decompile.py e64e89a99a6a74aca85c9813ca5ee98179c222eb31bbee0d558dbd2df1e1197a sub_404aa0 --debug

sample: e64e89a99a6a74aca85c9813ca5ee98179c222eb31bbee0d558dbd2df1e1197a case: https://bugfinder.seclab-bonn.de/case/58176/ dewolf commit: 3ed00946 Binaryninja version: 3.5.4526

rihi commented 2 months ago

/cib

github-actions[bot] commented 2 months ago

Branch issue-426-_TypeError_expressions_py_189_TypeError_unhashable_type_dict created!