I've identified the issue lies with the following line of code:
uint256 totalRegions = uint256(type(BosonTypes.PausableRegion).max);
It appears that during the Slither IR generation process, it's being transformed into:
totalRegions = uint256(type()(BosonTypes.PausableRegion).max)
'npx hardhat clean' running (wd: /Users/anajulia/dev/code/boson-protocol-contracts)
'npx hardhat clean --global' running (wd: /Users/anajulia/dev/code/boson-protocol-contracts)
'npx hardhat compile --force' running (wd: /Users/anajulia/dev/code/boson-protocol-contracts)
ERROR:SlitherSolcParsing:
Failed to generate IR for PauseHandlerFacet.getPausedRegions. Please open an issue https://github.com/crytic/slither/issues.
PauseHandlerFacet.getPausedRegions (contracts/protocol/facets/PauseHandlerFacet.sol#72-102):
status = protocolStatus()
totalRegions = uint256(type()(BosonTypes.PausableRegion).max)
regions = new BosonTypes.PausableRegion[](totalRegions)
status.pauseScenario == ALL_REGIONS_MASK
i = 0
i < totalRegions
regions[i] = BosonTypes.PausableRegion(i)
i ++
regions
count = 0
i_scope_0 = 0
i_scope_0 < totalRegions
(status.pauseScenario & (1 << i_scope_0)) != 0
regions[count] = BosonTypes.PausableRegion(i_scope_0)
count ++
i_scope_0 ++
mstore(uint256,uint256)(regions,count)
Traceback (most recent call last):
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 814, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 102, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 80, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 135, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 155, in _init_parsing_and_analyses
raise e
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 151, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 541, in analyze_contracts
self._convert_to_slithir()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 767, in _convert_to_slithir
raise e
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 752, in _convert_to_slithir
func.generate_slithir_and_analyze()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/core/declarations/function.py", line 1760, in generate_slithir_and_analyze
node.slithir_generation()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/core/cfg/node.py", line 706, in slithir_generation
self._irs = convert_expression(expression, self) # type:ignore
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slithir/convert.py", line 115, in convert_expression
visitor = ExpressionToSlithIR(expression, node)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/slithir/expression_to_slithir.py", line 162, in __init__
self._visit_expression(self.expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 43, in _visit_expression
self._visit_assignement_operation(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 99, in _visit_assignement_operation
self._visit_expression(expression.expression_right)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 82, in _visit_expression
self._visit_type_conversion(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 155, in _visit_type_conversion
self._visit_expression(expression.expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 93, in _visit_expression
self._post_visit(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 291, in _post_visit
self._post_member_access(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/slithir/expression_to_slithir.py", line 465, in _post_member_access
assert isinstance(type_expression_found, Identifier)
AssertionError
ERROR:root:Error in .
ERROR:root:Traceback (most recent call last):
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 814, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 102, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/__main__.py", line 80, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 135, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 155, in _init_parsing_and_analyses
raise e
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slither.py", line 151, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 541, in analyze_contracts
self._convert_to_slithir()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 767, in _convert_to_slithir
raise e
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 752, in _convert_to_slithir
func.generate_slithir_and_analyze()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/core/declarations/function.py", line 1760, in generate_slithir_and_analyze
node.slithir_generation()
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/core/cfg/node.py", line 706, in slithir_generation
self._irs = convert_expression(expression, self) # type:ignore
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/slithir/convert.py", line 115, in convert_expression
visitor = ExpressionToSlithIR(expression, node)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/slithir/expression_to_slithir.py", line 162, in __init__
self._visit_expression(self.expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 43, in _visit_expression
self._visit_assignement_operation(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 99, in _visit_assignement_operation
self._visit_expression(expression.expression_right)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 82, in _visit_expression
self._visit_type_conversion(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 155, in _visit_type_conversion
self._visit_expression(expression.expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 93, in _visit_expression
self._post_visit(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/expression/expression.py", line 291, in _post_visit
self._post_member_access(expression)
File "/Users/anajulia/Library/Python/3.9/lib/python/site-packages/slither/visitors/slithir/expression_to_slithir.py", line 465, in _post_member_access
assert isinstance(type_expression_found, Identifier)
AssertionError
Describe the issue:
IR generation failing.
I've identified the issue lies with the following line of code:
uint256 totalRegions = uint256(type(BosonTypes.PausableRegion).max);
It appears that during the Slither IR generation process, it's being transformed into:totalRegions = uint256(type()(BosonTypes.PausableRegion).max)
This seems to be a bug that needs addressing.
Code example to reproduce the issue:
Clone https://github.com/bosonprotocol/boson-protocol-contracts Go to commit https://github.com/bosonprotocol/boson-protocol-contracts/pull/644/commits/c9ee232050034e9f12b0b17ef8c56466f0e5ba11 run
slither . --checklist
Version:
0.9.5
Relevant log output: