crytic / crytic/slither

Exception: Incorrect parsing of array push return value (?)

Open
#593 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
6.4k
Forks
1.1k
PR merge metrics
No merged PRs in 30d

Description

During an array `.push()` operation, a default value is pushed into the array, and is returned. In a `uint[][]`, a push operation should then add a `uint[]` and return it. Thus, this contract should work:
```
contract Array3DPushPush {
uint[][] arr;

function f() public {
arr.push().push();
}
}
```
But you are met with a similar exception to #592 (related?):
```
Traceback (most recent call last):
File "c:\users\x\documents\github\slither\slither\__main__.py", line 610, in main_impl
(slither_instances, results_detectors, results_printers, number_contracts) = process_all(filename, args,
File "c:\users\x\documents\github\slither\slither\__main__.py", line 67, in process_all
(slither, current_results_detectors, current_results_printers, current_analyzed_count) = process_single(
File "c:\users\x\documents\github\slither\slither\__main__.py", line 53, in process_single
slither = Slither(target,
File "c:\users\x\documents\github\slither\slither\slither.py", line 86, in __init__
self._parser.analyze_contracts()
File "c:\users\x\documents\github\slither\slither\solc_parsing\slitherSolc.py", line 345, in analyze_contracts
self._convert_to_slithir()
File "c:\users\x\documents\github\slither\slither\solc_parsing\slitherSolc.py", line 489, in _convert_to_slithir
func.generate_slithir_and_analyze()
File "c:\users\x\documents\github\slither\slither\core\declarations\function.py", line 1652, in generate_slithir_and_analyze
node.slithir_generation()
File "c:\users\x\documents\github\slither\slither\core\cfg\node.py", line 704, in slithir_generation
self._find_read_write_call()
File "c:\users\x\documents\github\slither\slither\core\cfg\node.py", line 889, in _find_read_write_call
raise SlitherException(
slither.exceptions.SlitherException: Function not found on TMP_1(None) = HIGH_LEVEL_CALL, dest:TMP_0(None), function:push, arguments:[] . Please try compiling with a recent Solidity version.
ERROR:root:Error:
ERROR:root:Function not found on TMP_1(None) = HIGH_LEVEL_CALL, dest:TMP_0(None), function:push, arguments:[] . Please try compiling with a recent Solidity version.
ERROR:root:Please report an issue to https://github.com/crytic/slither/issues
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.