You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ifisinstance(expr.iter, Attribute): # state variable
As it seems that Slither is assuming that if the iterable is an Attribute, it must be something like self.[smth] (a state variable) but the Attribute AST node is also used for struct accessing.
Code example to reproduce the issue:
struct A:
a: uint256[3]
@externaldef foo():
x: A =A({a:[1,2,3]})
temp:uint256=0for i in x.a:
temp += i
Version:
0.10.0
Relevant log output:
Traceback (most recent call last):
File "/home/csdocker/.local/bin/slither", line 8, in<module>sys.exit(main())
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/__main__.py", line 727, in main
main_impl(all_detector_classes=detectors, all_printer_classes=printers)
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/__main__.py", line 833, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/__main__.py", line 107, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/__main__.py", line 80, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/slither.py", line 144, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/slither.py", line 164, in _init_parsing_and_analyses
raise e
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/slither.py", line 160, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/vyper_parsing/vyper_compilation_unit.py", line 61, in analyze_contracts
contract_parser.analyze()
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/vyper_parsing/declarations/contract.py", line 521, in analyze
function.analyze_content()
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/vyper_parsing/declarations/function.py", line 186, in analyze_content
self._parse_cfg(body)
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/vyper_parsing/declarations/function.py", line 523, in _parse_cfg
curr_node = parse_statement(curr_node, expr)
File "/home/csdocker/.local/pipx/venvs/slither-analyzer/lib/python3.10/site-packages/slither/vyper_parsing/declarations/function.py", line 333, in parse_statement
loop_iterator = list(
IndexError: list index out of range
The text was updated successfully, but these errors were encountered:
0xalpharush
changed the title
[Bug-Candidate]: Vyper for loop over an iterable inside a struct fails
[Bug]: Vyper for loop over an iterable inside a struct fails
Oct 19, 2023
Describe the issue:
Slither crashes when analysing a Vyper program that contains a
for
loop iterating over an array inside a struct.Likely caused by:
slither/slither/vyper_parsing/declarations/function.py
Line 331 in e3dcf1e
As it seems that Slither is assuming that if the iterable is an
Attribute
, it must be something likeself.[smth]
(a state variable) but theAttribute
AST node is also used for struct accessing.Code example to reproduce the issue:
Version:
0.10.0
Relevant log output:
The text was updated successfully, but these errors were encountered: