slither icon indicating copy to clipboard operation
slither copied to clipboard

[Bug]: TypeError: unhashable type: 'list' on certain address input

Open a4dyn opened this issue 2 years ago • 4 comments

Describe the issue:

When using slither on certain contracts (online), an error would occur. Please refer to the Relevant log output for detail.

Code example to reproduce the issue:

Command: slither bsc:0x00000047bb99ea4d791bb749d970de71ee0b1a34 The code is on bscscan.com: https://bscscan.com/address/0x00000047bb99ea4d791bb749d970de71ee0b1a34#code

Version:

0.9.2

Relevant log output:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 834, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 98, in process_all
    ) = process_single(compilation, args, detector_classes, printer_classes)
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 76, in process_single
    slither = Slither(target, ast_format=ast, **vars(args))
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 133, in __init__
    self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 153, in _init_parsing_and_analyses
    raise e
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 149, in _init_parsing_and_analyses
    parser.analyze_contracts()
  File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 529, in analyze_contracts
    self._convert_to_slithir()
  File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 740, in _convert_to_slithir
    func.generate_slithir_and_analyze()
  File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function.py", line 1750, in generate_slithir_and_analyze
    node.slithir_generation()
  File "/usr/local/lib/python3.9/site-packages/slither/core/cfg/node.py", line 719, in slithir_generation
    self._irs = convert_expression(expression, self)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 119, in convert_expression
    result = apply_ir_heuristics(result, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 1858, in apply_ir_heuristics
    irs = propagate_type_and_convert_call(irs, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 442, in propagate_type_and_convert_call
    new_ins = propagate_types(ins, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 541, in propagate_types
    if t in using_for or "*" in using_for:
TypeError: unhashable type: 'list'
Error in bsc:0x00000047bb99ea4d791bb749d970de71ee0b1a34
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 834, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 98, in process_all
    ) = process_single(compilation, args, detector_classes, printer_classes)
  File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 76, in process_single
    slither = Slither(target, ast_format=ast, **vars(args))
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 133, in __init__
    self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 153, in _init_parsing_and_analyses
    raise e
  File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 149, in _init_parsing_and_analyses
    parser.analyze_contracts()
  File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 529, in analyze_contracts
    self._convert_to_slithir()
  File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 740, in _convert_to_slithir
    func.generate_slithir_and_analyze()
  File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function.py", line 1750, in generate_slithir_and_analyze
    node.slithir_generation()
  File "/usr/local/lib/python3.9/site-packages/slither/core/cfg/node.py", line 719, in slithir_generation
    self._irs = convert_expression(expression, self)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 119, in convert_expression
    result = apply_ir_heuristics(result, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 1858, in apply_ir_heuristics
    irs = propagate_type_and_convert_call(irs, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 442, in propagate_type_and_convert_call
    new_ins = propagate_types(ins, node)
  File "/usr/local/lib/python3.9/site-packages/slither/slithir/convert.py", line 541, in propagate_types
    if t in using_for or "*" in using_for:
TypeError: unhashable type: 'list'

a4dyn avatar Sep 20 '23 20:09 a4dyn

On 0.9.6, I get a different error:

    modifier_parser.analyze_content()
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/declarations/modifier.py", line 91, in analyze_content
    yul_parser.analyze_expressions()
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 342, in analyze_expressions
    node.analyze_expressions()
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 65, in analyze_expressions
    expression = parse_yul(self._scope, self, self._unparsed_expression)
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 885, in parse_yul
    op: Expression = parsers.get(ast["nodeType"], parse_yul_unsupported)(root, node, ast)
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 711, in parse_yul_function_call
    args = [parse_yul(root, node, arg) for arg in ast["arguments"]]
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 711, in <listcomp>
    args = [parse_yul(root, node, arg) for arg in ast["arguments"]]
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 885, in parse_yul
    op: Expression = parsers.get(ast["nodeType"], parse_yul_unsupported)(root, node, ast)
  File "/Users/alpharush/.pyenv/versions/3.10.0/envs/reporting/lib/python3.10/site-packages/slither/solc_parsing/yul/parse_yul.py", line 847, in parse_yul_identifier
    raise SlitherException(f"unresolved reference to identifier {name}")
slither.exceptions.SlitherException: unresolved reference to identifier _status.slot
ERROR:root:Error:
ERROR:root:unresolved reference to identifier _status.slot

EDIT: I think this was fixed by https://github.com/crytic/slither/pull/2172 but the OP's issue persists

0xalpharush avatar Sep 20 '23 21:09 0xalpharush

Any update on this issue? I stumbled upon the same TypeError: unhashable type: 'list' error as well.

dibakarsutradhar avatar Feb 25 '24 03:02 dibakarsutradhar

@dibakarsutradhar Can you share the full stack trace, slither version you're using, and source code (if possible)?

0xalpharush avatar Feb 25 '24 04:02 0xalpharush

@0xalpharush I got it fixed, thanks for your quick reply. Here's what worked for me -

forge clean
forge build --build-info --skip test --skip script
slither . --config-file slither.config.json

The slither.config looks like this -

{
	"compile_force_framework": "foundry",
	"foundry_out_directory": "out",
	"ignore_compile": true,
	"skip_clean": true,
	"filter_paths": "lib|test|script|testnet|interfaces",
	"solc_disable_warnings": true,
	"json": "slither.json",
	"exclude_optimization": true,
	"exclude_informational": true,
	"detectors_to_exclude": "solc-version,redundant-statements,similar-names,constable-states,immutable-states"
}

dibakarsutradhar avatar Feb 25 '24 05:02 dibakarsutradhar