mirror of https://github.com/crytic/slither
Merge pull request #1484 from crytic/detect/self-call
Recommend reading variable without additional STATICCALLpull/1542/head
commit
dbc368fe75
@ -0,0 +1,60 @@ |
||||
from typing import List |
||||
from slither.core.cfg.node import Node |
||||
from slither.core.declarations import Function, SolidityVariable |
||||
from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification |
||||
from slither.slithir.operations.high_level_call import HighLevelCall |
||||
|
||||
|
||||
class VarReadUsingThis(AbstractDetector): |
||||
ARGUMENT = "var-read-using-this" |
||||
HELP = "Contract reads its own variable using `this`" |
||||
IMPACT = DetectorClassification.OPTIMIZATION |
||||
CONFIDENCE = DetectorClassification.HIGH |
||||
|
||||
WIKI = "https://github.com/crytic/slither/wiki/Vulnerabilities-Description#public-variable-read-in-external-context" |
||||
|
||||
WIKI_TITLE = "Public variable read in external context" |
||||
WIKI_DESCRIPTION = "The contract reads its own variable using `this`, adding overhead of an unnecessary STATICCALL." |
||||
WIKI_EXPLOIT_SCENARIO = """ |
||||
```solidity |
||||
contract C { |
||||
mapping(uint => address) public myMap; |
||||
function test(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
} |
||||
``` |
||||
""" |
||||
|
||||
WIKI_RECOMMENDATION = "Read the variable directly from storage instead of calling the contract." |
||||
|
||||
def _detect(self): |
||||
results = [] |
||||
for c in self.contracts: |
||||
for func in c.functions: |
||||
for node in self._detect_var_read_using_this(func): |
||||
info = [ |
||||
"The function ", |
||||
func, |
||||
" reads ", |
||||
node, |
||||
" with `this` which adds an extra STATICCALL.\n", |
||||
] |
||||
json = self.generate_result(info) |
||||
results.append(json) |
||||
|
||||
return results |
||||
|
||||
@staticmethod |
||||
def _detect_var_read_using_this(func: Function) -> List[Node]: |
||||
results: List[Node] = [] |
||||
for node in func.nodes: |
||||
for ir in node.irs: |
||||
if isinstance(ir, HighLevelCall): |
||||
if ( |
||||
ir.destination == SolidityVariable("this") |
||||
and ir.is_static_call() |
||||
and ir.function.visibility == "public" |
||||
): |
||||
results.append(node) |
||||
return sorted(results, key=lambda x: x.node_id) |
@ -0,0 +1,33 @@ |
||||
|
||||
contract VarReadUsingThis { |
||||
address public erc20; |
||||
mapping(uint => address) public myMap; |
||||
function bad1(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
function bad2() external returns(address) { |
||||
return this.erc20(); |
||||
} |
||||
function bad3() external returns(address) { |
||||
if (this.erc20() == address(0)) revert(); |
||||
} |
||||
function bad4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = this.erc20(); |
||||
} |
||||
} |
||||
function good1(uint x) external returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good2() external returns(address) { |
||||
return erc20; |
||||
} |
||||
function good3() external returns(address) { |
||||
if (erc20 == address(0)) revert(); |
||||
} |
||||
function good4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = erc20; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,3 @@ |
||||
[ |
||||
[] |
||||
] |
@ -0,0 +1,39 @@ |
||||
|
||||
contract VarReadUsingThis { |
||||
address public erc20; |
||||
mapping(uint => address) public myMap; |
||||
function bad1(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
function bad2() external returns(address) { |
||||
return this.erc20(); |
||||
} |
||||
function bad3() external returns(address) { |
||||
if (this.erc20() == address(0)) revert(); |
||||
} |
||||
function bad4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = this.erc20(); |
||||
} |
||||
} |
||||
function good1(uint x) external returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good2() external returns(address) { |
||||
return erc20; |
||||
} |
||||
function good3() external returns(address) { |
||||
if (erc20 == address(0)) revert(); |
||||
} |
||||
function good4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = erc20; |
||||
} |
||||
} |
||||
function mapExternal(uint x) external view returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good5(uint x) external returns(address) { |
||||
this.mapExternal(x); |
||||
} |
||||
} |
@ -0,0 +1,736 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20() == address(0)", |
||||
"source_mapping": { |
||||
"start": 331, |
||||
"length": 26, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 39 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad3() (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#11-13) reads this.erc20() == address(0) (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#12) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad3()](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L11-L13) reads [this.erc20() == address(0)](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L12) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L11-L13", |
||||
"id": "5556888563fa21301c242d57fbd8e08a35fc5d67171a88b9a2737c14be9c6f7f", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20()", |
||||
"source_mapping": { |
||||
"start": 244, |
||||
"length": 19, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad2() (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#8-10) reads this.erc20() (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#9) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad2()](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L8-L10) reads [this.erc20()](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L9) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L8-L10", |
||||
"id": "a55229af8750117389299ed9f759d5036882a2396a52087bb2a42c5ed8abaec1", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.myMap(x)", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 20, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 29 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad1(uint256) (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#5-7) reads this.myMap(x) (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#6) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad1(uint256)](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L5-L7) reads [this.myMap(x)](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L6) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L5-L7", |
||||
"id": "e810f17bcfdf391a48e66ef70c4aafcc205c882b28d0588b26f1d45742580df6", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "local = this.erc20()", |
||||
"source_mapping": { |
||||
"start": 471, |
||||
"length": 28, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 41 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1107, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad4() (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#14-18) reads local = this.erc20() (tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#16) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad4()](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L14-L18) reads [local = this.erc20()](tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L16) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.5.16/var_read_using_this.sol#L14-L18", |
||||
"id": "fe997df3fdea17b13139a239ecdcdb64a2f6482aa9dacc62f845ef30591c8e4c", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
|
||||
contract VarReadUsingThis { |
||||
address public erc20; |
||||
mapping(uint => address) public myMap; |
||||
function bad1(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
function bad2() external returns(address) { |
||||
return this.erc20(); |
||||
} |
||||
function bad3() external returns(address) { |
||||
if (this.erc20() == address(0)) revert(); |
||||
} |
||||
function bad4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = this.erc20(); |
||||
} |
||||
} |
||||
function good1(uint x) external returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good2() external returns(address) { |
||||
return erc20; |
||||
} |
||||
function good3() external returns(address) { |
||||
if (erc20 == address(0)) revert(); |
||||
} |
||||
function good4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = erc20; |
||||
} |
||||
} |
||||
function mapExternal(uint x) external view returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good5(uint x) external returns(address) { |
||||
this.mapExternal(x); |
||||
} |
||||
} |
@ -0,0 +1,736 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20() == address(0)", |
||||
"source_mapping": { |
||||
"start": 331, |
||||
"length": 26, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 39 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad3() (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#11-13) reads this.erc20() == address(0) (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#12) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad3()](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L11-L13) reads [this.erc20() == address(0)](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L12) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L11-L13", |
||||
"id": "314f90a4989ea75cc274e1f5f46036968c2ecdaaf8fa84913e7db4ef1ffe5bb8", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "local = this.erc20()", |
||||
"source_mapping": { |
||||
"start": 471, |
||||
"length": 28, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 41 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad4() (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#14-18) reads local = this.erc20() (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#16) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad4()](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L14-L18) reads [local = this.erc20()](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L16) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L14-L18", |
||||
"id": "5fd3f1f78f3532107d7e111d84310f3a0fa374fa407e43951d70fd00a752f76f", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.myMap(x)", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 20, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 29 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad1(uint256) (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#5-7) reads this.myMap(x) (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#6) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad1(uint256)](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L5-L7) reads [this.myMap(x)](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L6) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L5-L7", |
||||
"id": "a30c3d8ddb468d865fa69afe5b7b83164fc1a332933d4661765cc3781896c7cf", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20()", |
||||
"source_mapping": { |
||||
"start": 244, |
||||
"length": 19, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad2() (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#8-10) reads this.erc20() (tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#9) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad2()](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L8-L10) reads [this.erc20()](tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L9) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.6.11/var_read_using_this.sol#L8-L10", |
||||
"id": "ccc77ba655d341c0461ca4f4040afe19c379b2333e52648b12f793aaf7f0ead8", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
|
||||
contract VarReadUsingThis { |
||||
address public erc20; |
||||
mapping(uint => address) public myMap; |
||||
function bad1(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
function bad2() external returns(address) { |
||||
return this.erc20(); |
||||
} |
||||
function bad3() external returns(address) { |
||||
if (this.erc20() == address(0)) revert(); |
||||
} |
||||
function bad4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = this.erc20(); |
||||
} |
||||
} |
||||
function good1(uint x) external returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good2() external returns(address) { |
||||
return erc20; |
||||
} |
||||
function good3() external returns(address) { |
||||
if (erc20 == address(0)) revert(); |
||||
} |
||||
function good4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = erc20; |
||||
} |
||||
} |
||||
function mapExternal(uint x) external view returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good5(uint x) external returns(address) { |
||||
this.mapExternal(x); |
||||
} |
||||
} |
@ -0,0 +1,736 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20() == address(0)", |
||||
"source_mapping": { |
||||
"start": 331, |
||||
"length": 26, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 39 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad3() (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#11-13) reads this.erc20() == address(0) (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#12) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad3()](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L11-L13) reads [this.erc20() == address(0)](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L12) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L11-L13", |
||||
"id": "1a8ed403cb8c6104a99c9dabdfb64e55282eaedf2c2d8b20fd3b366c49443639", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20()", |
||||
"source_mapping": { |
||||
"start": 244, |
||||
"length": 19, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad2() (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#8-10) reads this.erc20() (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#9) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad2()](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L8-L10) reads [this.erc20()](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L9) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L8-L10", |
||||
"id": "5bddf45a7f968094e163217be36e0cf17b7455740755eec53a1e7b0a44fe63ac", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.myMap(x)", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 20, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 29 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad1(uint256) (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#5-7) reads this.myMap(x) (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#6) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad1(uint256)](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L5-L7) reads [this.myMap(x)](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L6) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L5-L7", |
||||
"id": "924c227bf74e70dda261578563193b90b60b70a1ad043716e1d98cbc49b87ceb", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "local = this.erc20()", |
||||
"source_mapping": { |
||||
"start": 471, |
||||
"length": 28, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 41 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad4() (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#14-18) reads local = this.erc20() (tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#16) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad4()](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L14-L18) reads [local = this.erc20()](tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L16) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.7.6/var_read_using_this.sol#L14-L18", |
||||
"id": "e9b34de7b565a0e63e55b9c74eaf9a265c7f4c8ef866d7b7db17b815393f0477", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
|
||||
contract VarReadUsingThis { |
||||
address public erc20; |
||||
mapping(uint => address) public myMap; |
||||
function bad1(uint x) external returns(address) { |
||||
return this.myMap(x); |
||||
} |
||||
function bad2() external returns(address) { |
||||
return this.erc20(); |
||||
} |
||||
function bad3() external returns(address) { |
||||
if (this.erc20() == address(0)) revert(); |
||||
} |
||||
function bad4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = this.erc20(); |
||||
} |
||||
} |
||||
function good1(uint x) external returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good2() external returns(address) { |
||||
return erc20; |
||||
} |
||||
function good3() external returns(address) { |
||||
if (erc20 == address(0)) revert(); |
||||
} |
||||
function good4() internal returns(address) { |
||||
for (uint x; x < 10; x++) { |
||||
address local = erc20; |
||||
} |
||||
} |
||||
function mapExternal(uint x) external view returns(address) { |
||||
return myMap[x]; |
||||
} |
||||
function good5(uint x) external returns(address) { |
||||
this.mapExternal(x); |
||||
} |
||||
} |
@ -0,0 +1,736 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20()", |
||||
"source_mapping": { |
||||
"start": 244, |
||||
"length": 19, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 192, |
||||
"length": 78, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8, |
||||
9, |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad2()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad2() (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#8-10) reads this.erc20() (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#9) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad2()](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L8-L10) reads [this.erc20()](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L9) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L8-L10", |
||||
"id": "4e297ea309b8865f782db6a53fdaf5aaf37f768158deb69d2ec6106a8e7b8afd", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.myMap(x)", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 20, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 29 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 102, |
||||
"length": 85, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad1(uint256)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad1(uint256) (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#5-7) reads this.myMap(x) (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#6) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad1(uint256)](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L5-L7) reads [this.myMap(x)](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L6) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L5-L7", |
||||
"id": "ce4d740b2da0b9b71f2dd3dd1c0903124f7be34009ede12a43dc33c6f28b9d28", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "this.erc20() == address(0)", |
||||
"source_mapping": { |
||||
"start": 331, |
||||
"length": 26, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 39 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad3", |
||||
"source_mapping": { |
||||
"start": 275, |
||||
"length": 99, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad3()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad3() (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#11-13) reads this.erc20() == address(0) (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#12) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad3()](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L11-L13) reads [this.erc20() == address(0)](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L12) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L11-L13", |
||||
"id": "d4602ee9be1e60f8ae80e6d0a867b532cb2ddef0ba44b25af8808a0ac5a6b828", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "local = this.erc20()", |
||||
"source_mapping": { |
||||
"start": 471, |
||||
"length": 28, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 41 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad4", |
||||
"source_mapping": { |
||||
"start": 379, |
||||
"length": 138, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VarReadUsingThis", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 1103, |
||||
"filename_relative": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21, |
||||
22, |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad4()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "The function VarReadUsingThis.bad4() (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#14-18) reads local = this.erc20() (tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#16) with `this` which adds an extra STATICCALL.\n", |
||||
"markdown": "The function [VarReadUsingThis.bad4()](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L14-L18) reads [local = this.erc20()](tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L16) with `this` which adds an extra STATICCALL.\n", |
||||
"first_markdown_element": "tests/detectors/var-read-using-this/0.8.15/var_read_using_this.sol#L14-L18", |
||||
"id": "fec10ba084a6322d0fbb895e6c7ca6bca380b48a54d2ecae92a017b8b41242bf", |
||||
"check": "var-read-using-this", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
Loading…
Reference in new issue