slither
slither copied to clipboard
[Bug-Candidate]: `AssertionError` in `ssa.py`
Describe the issue:
Older versions of solmate's DSTestPlus have the below block of code (it's slightly modified in newer versions, and I haven't tested those). Even though we don't use the block of code in question, it causes the error shown below.
string private checkpointLabel;
uint256 private checkpointGasLeft;
function startMeasuringGas(string memory label) internal virtual {
checkpointLabel = label;
checkpointGasLeft = gasleft();
}
function stopMeasuringGas() internal virtual {
uint256 checkpointGasLeft2 = gasleft();
string memory label = checkpointLabel;
emit log_named_uint(string(abi.encodePacked(label, " Gas")), checkpointGasLeft - checkpointGasLeft2);
}
Logging the value of ir and variable in ssa.py's get_variable method prints the following right before the error:
ir: checkpointLabel(string) := label(string)
variable: checkpointLabel
Since we were't using the code, I was able to comment out the problematic section and use slither, though I'm not sure of other workarounds if we were using it
Code example to reproduce the issue:
https://github.com/transmissions11/solmate/blob/44a9963d4c78111f77caa0e65d677b8b46d6f2e6/src/test/utils/DSTestPlus.sol#L15-L29
Version:
0.8.3
Relevant log output:
Missing params 'startMeasuringGas(string)'
Missing params 'startMeasuringGas(string)'
Missing params 'startMeasuringGas(string)'
Missing params 'startMeasuringGas(string)'
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 744, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 87, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 70, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 123, in __init__
parser.analyze_contracts()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 496, in analyze_contracts
self._convert_to_slithir()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 693, in _convert_to_slithir
contract.convert_expression_to_slithir_ssa()
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/contract.py", line 1301, in convert_expression_to_slithir_ssa
func.generate_slithir_ssa(all_ssa_state_variables_instances)
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function_contract.py", line 110, in generate_slithir_ssa
add_ssa_ir(self, all_ssa_state_variables_instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 182, in add_ssa_ir
generate_ssa_irs(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 297, in generate_ssa_irs
generate_ssa_irs(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 241, in generate_ssa_irs
new_ir = copy_ir(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 670, in copy_ir
lvalue = get_variable(ir, lambda x: x.lvalue, *instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 630, in get_variable
variable = get(variable, *instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 609, in get
assert isinstance(
AssertionError
None
Error in .
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 744, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 87, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
File "/usr/local/lib/python3.9/site-packages/slither/__main__.py", line 70, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
File "/usr/local/lib/python3.9/site-packages/slither/slither.py", line 123, in __init__
parser.analyze_contracts()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 496, in analyze_contracts
self._convert_to_slithir()
File "/usr/local/lib/python3.9/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 693, in _convert_to_slithir
contract.convert_expression_to_slithir_ssa()
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/contract.py", line 1301, in convert_expression_to_slithir_ssa
func.generate_slithir_ssa(all_ssa_state_variables_instances)
File "/usr/local/lib/python3.9/site-packages/slither/core/declarations/function_contract.py", line 110, in generate_slithir_ssa
add_ssa_ir(self, all_ssa_state_variables_instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 182, in add_ssa_ir
generate_ssa_irs(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 297, in generate_ssa_irs
generate_ssa_irs(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 241, in generate_ssa_irs
new_ir = copy_ir(
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 670, in copy_ir
lvalue = get_variable(ir, lambda x: x.lvalue, *instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 630, in get_variable
variable = get(variable, *instances)
File "/usr/local/lib/python3.9/site-packages/slither/slithir/utils/ssa.py", line 609, in get
assert isinstance(
AssertionError