mirror of https://github.com/crytic/slither
parent
cf07c59516
commit
fa22b62634
@ -0,0 +1,99 @@ |
||||
pragma experimental ABIEncoderV2; |
||||
|
||||
contract A { |
||||
|
||||
struct S { |
||||
uint i; |
||||
} |
||||
|
||||
uint[2][3] bad_arr = [[1, 2], [3, 4], [5, 6]]; |
||||
uint[3] good_arr = [1, 2, 3]; |
||||
S[3] s; |
||||
|
||||
event event1_bad(uint[2][3] bad_arr); |
||||
event event1_good(uint[3] good_arr); |
||||
event event2_bad(S[3] s); |
||||
|
||||
function bad0_external(uint [2][3] calldata arr1) external { |
||||
} |
||||
|
||||
/* Array of arrays passed to an external function is vulnerable */ |
||||
function bad0() public { |
||||
this.bad0_external(bad_arr); |
||||
} |
||||
|
||||
function bad1_external (S[3] calldata s1) external { |
||||
} |
||||
|
||||
/* Array of structs passed to an external function is vulnerable */ |
||||
function bad1 (S[3] memory s1) public { |
||||
this.bad1_external(s); |
||||
} |
||||
|
||||
/* Array of arrays passed to abi.encode is vulnerable */ |
||||
function bad2() public { |
||||
bytes memory b = abi.encode(bad_arr); |
||||
} |
||||
|
||||
/* Array of structs passed to abi.encode is vulnerable */ |
||||
function bad3() public { |
||||
bytes memory b = abi.encode(s); |
||||
} |
||||
|
||||
/* Array of arrays passed to an event emit is vulnerable */ |
||||
function bad4() public { |
||||
emit event1_bad(bad_arr); |
||||
} |
||||
|
||||
/* Array of structs passed to an event emit is vulnerable */ |
||||
function bad5() public { |
||||
emit event2_bad(s); |
||||
} |
||||
|
||||
function good0_public (uint[2][3] memory arr1) public { |
||||
} |
||||
|
||||
/* Array of arrays passed to a public function is benign */ |
||||
function good0() public { |
||||
good0_public(bad_arr); |
||||
} |
||||
|
||||
function good1_public (S[3] memory s1) public { |
||||
} |
||||
|
||||
/* Array of structs passed to a public function is benign */ |
||||
function good1 (S[3] memory s1) public { |
||||
good1_public(s); |
||||
} |
||||
|
||||
/* Array of arrays in-memory passed to abi.encode is benign */ |
||||
function good2() public { |
||||
uint8 [2][3] memory bad_arr_mem = [[1, 2], [3, 4], [5, 6]]; |
||||
bytes memory b = abi.encode(bad_arr_mem); |
||||
} |
||||
|
||||
/* Array of structs in-memory passed to abi.encode is benign */ |
||||
function good3() public { |
||||
S[3] memory s_mem; |
||||
bytes memory b = abi.encode(s_mem); |
||||
} |
||||
|
||||
function good4_external(uint[3] calldata arr1) external { |
||||
} |
||||
|
||||
/* Array of elementary types passed to external function is benign */ |
||||
function good4() public { |
||||
this.good4_external(good_arr); |
||||
} |
||||
|
||||
/* Array of elementary types passed to abi.encode is benign */ |
||||
function good5() public { |
||||
bytes memory b = abi.encode(good_arr); |
||||
} |
||||
|
||||
/* Array of elementary types passed to event emit is benign */ |
||||
function good6() public { |
||||
emit event1_good(good_arr); |
||||
} |
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,99 @@ |
||||
pragma experimental ABIEncoderV2; |
||||
|
||||
contract A { |
||||
|
||||
struct S { |
||||
uint i; |
||||
} |
||||
|
||||
uint[2][3] bad_arr = [[1, 2], [3, 4], [5, 6]]; |
||||
uint[3] good_arr = [1, 2, 3]; |
||||
S[3] s; |
||||
|
||||
event event1_bad(uint[2][3] bad_arr); |
||||
event event1_good(uint[3] good_arr); |
||||
event event2_bad(S[3] s); |
||||
|
||||
function good7_external(uint [2][3] calldata arr1) external { |
||||
} |
||||
|
||||
/* Array of arrays passed to an external function is vulnerable */ |
||||
function good7() public { |
||||
this.good7_external(bad_arr); |
||||
} |
||||
|
||||
function good8_external (S[3] calldata s1) external { |
||||
} |
||||
|
||||
/* Array of structs passed to an external function is vulnerable */ |
||||
function good8 (S[3] memory s1) public { |
||||
this.good8_external(s); |
||||
} |
||||
|
||||
/* Array of arrays passed to abi.encode is vulnerable */ |
||||
function good9() public { |
||||
bytes memory b = abi.encode(bad_arr); |
||||
} |
||||
|
||||
/* Array of structs passed to abi.encode is vulnerable */ |
||||
function good10() public { |
||||
bytes memory b = abi.encode(s); |
||||
} |
||||
|
||||
/* Array of arrays passed to an event emit is vulnerable */ |
||||
function good11() public { |
||||
emit event1_bad(bad_arr); |
||||
} |
||||
|
||||
/* Array of structs passed to an event emit is vulnerable */ |
||||
function good12() public { |
||||
emit event2_bad(s); |
||||
} |
||||
|
||||
function good0_public (uint[2][3] memory arr1) public { |
||||
} |
||||
|
||||
/* Array of arrays passed to a public function is benign */ |
||||
function good0() public { |
||||
good0_public(bad_arr); |
||||
} |
||||
|
||||
function good1_public (S[3] memory s1) public { |
||||
} |
||||
|
||||
/* Array of structs passed to a public function is benign */ |
||||
function good1 (S[3] memory s1) public { |
||||
good1_public(s); |
||||
} |
||||
|
||||
/* Array of arrays in-memory passed to abi.encode is benign */ |
||||
function good2() public { |
||||
uint8 [2][3] memory bad_arr_mem = [[1, 2], [3, 4], [5, 6]]; |
||||
bytes memory b = abi.encode(bad_arr_mem); |
||||
} |
||||
|
||||
/* Array of structs in-memory passed to abi.encode is benign */ |
||||
function good3() public { |
||||
S[3] memory s_mem; |
||||
bytes memory b = abi.encode(s_mem); |
||||
} |
||||
|
||||
function good4_external(uint[3] calldata arr1) external { |
||||
} |
||||
|
||||
/* Array of elementary types passed to external function is benign */ |
||||
function good4() public { |
||||
this.good4_external(good_arr); |
||||
} |
||||
|
||||
/* Array of elementary types passed to abi.encode is benign */ |
||||
function good5() public { |
||||
bytes memory b = abi.encode(good_arr); |
||||
} |
||||
|
||||
/* Array of elementary types passed to event emit is benign */ |
||||
function good6() public { |
||||
emit event1_good(good_arr); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,388 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 147, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 869, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "msg.sender.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 181, |
||||
"length": 38, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 47 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 147, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 869, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.direct() (tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#12)\n", |
||||
"markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L12)\n", |
||||
"id": "477cc1ab9fa3d2263400e47d09146eaed3e478f5eecf7856b59d49a2a5093a1c", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 301, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 869, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "destination.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 337, |
||||
"length": 39, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 48 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 301, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 869, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.indirect() (tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#20)\n", |
||||
"markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L20)\n", |
||||
"id": "4759805615df746a3d8a6c068ce885d2c18c46edf411f83ae004593958caafe7", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,388 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "msg.sender.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 196, |
||||
"length": 38, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 47 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.direct() (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#12)\n", |
||||
"markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L12)\n", |
||||
"id": "9531cafd91af4d7b54f22fa933dae983077df1c51bd855c2516ffee812911f43", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 316, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "destination.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 352, |
||||
"length": 39, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 48 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 316, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.indirect() (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#20)\n", |
||||
"markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L20)\n", |
||||
"id": "f1395ebf21de9f8fb2c5d254c5990cce55b239c05a6a5e074813f58c6cd32834", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,41 @@ |
||||
contract Test{ |
||||
|
||||
address payable destination; |
||||
|
||||
mapping (address => uint) balances; |
||||
|
||||
constructor() public{ |
||||
balances[msg.sender] = 0; |
||||
} |
||||
|
||||
function direct() public{ |
||||
msg.sender.send(address(this).balance); |
||||
} |
||||
|
||||
function init() public{ |
||||
destination = msg.sender; |
||||
} |
||||
|
||||
function indirect() public{ |
||||
destination.send(address(this).balance); |
||||
} |
||||
|
||||
// these are legitimate calls |
||||
// and should not be detected |
||||
function repay() payable public{ |
||||
msg.sender.transfer(msg.value); |
||||
} |
||||
|
||||
function withdraw() public{ |
||||
uint val = balances[msg.sender]; |
||||
msg.sender.send(val); |
||||
} |
||||
|
||||
function buy() payable public{ |
||||
uint value_send = msg.value; |
||||
uint value_spent = 0 ; // simulate a buy of tokens |
||||
uint remaining = value_send - value_spent; |
||||
msg.sender.send(remaining); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,388 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "msg.sender.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 196, |
||||
"length": 38, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 47 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "direct", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 79, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "direct()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.direct() (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#12)\n", |
||||
"markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L12)\n", |
||||
"id": "8a1de239f630f10fef9ef6a9c439fc10aad2f6caba7ee43d1a7f7bacf6028f1e", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 316, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "destination.send(address(this).balance)", |
||||
"source_mapping": { |
||||
"start": 352, |
||||
"length": 39, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 48 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "indirect", |
||||
"source_mapping": { |
||||
"start": 316, |
||||
"length": 82, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "Test", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 884, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "indirect()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "Test.indirect() (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#20)\n", |
||||
"markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L20)\n", |
||||
"id": "f272e05d9741895fc22051ed09afa6ce4af8ad4cd74b3452224dfb29eb4b9df6", |
||||
"check": "arbitrary-send", |
||||
"impact": "High", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,41 @@ |
||||
contract Test{ |
||||
|
||||
address payable destination; |
||||
|
||||
mapping (address => uint) balances; |
||||
|
||||
constructor() public{ |
||||
balances[msg.sender] = 0; |
||||
} |
||||
|
||||
function direct() public{ |
||||
msg.sender.send(address(this).balance); |
||||
} |
||||
|
||||
function init() public{ |
||||
destination = msg.sender; |
||||
} |
||||
|
||||
function indirect() public{ |
||||
destination.send(address(this).balance); |
||||
} |
||||
|
||||
// these are legitimate calls |
||||
// and should not be detected |
||||
function repay() payable public{ |
||||
msg.sender.transfer(msg.value); |
||||
} |
||||
|
||||
function withdraw() public{ |
||||
uint val = balances[msg.sender]; |
||||
msg.sender.send(val); |
||||
} |
||||
|
||||
function buy() payable public{ |
||||
uint value_send = msg.value; |
||||
uint value_spent = 0 ; // simulate a buy of tokens |
||||
uint remaining = value_send - value_spent; |
||||
msg.sender.send(remaining); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,51 @@ |
||||
contract C { |
||||
uint[1] public x; |
||||
|
||||
function f() public { |
||||
setByRef(x); // can set x. |
||||
setByValue(x); // cannot set x. |
||||
uint test = 1 + setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
function g() public { |
||||
uint[1] storage y = x; |
||||
setByRef(y); // can set y. |
||||
setByValue(y); // cannot set y. |
||||
uint test = 1 + setByValueAndReturn(y); // cannot set y. |
||||
} |
||||
|
||||
function setByRef(uint[1] storage arr) internal { |
||||
arr[0] = 1; |
||||
} |
||||
|
||||
function setByValue(uint[1] memory arr) public { |
||||
arr[0] = 2; |
||||
} |
||||
|
||||
function setByValueAndReturn(uint[1] memory arr) public returns(uint) { |
||||
arr[0] = 2; |
||||
return arr[0]; |
||||
} |
||||
} |
||||
|
||||
contract D { |
||||
// Struct definition |
||||
struct TestStruct { |
||||
uint[1] x; |
||||
} |
||||
|
||||
// State Variables |
||||
TestStruct ts; |
||||
uint[1] x; |
||||
|
||||
// Functions |
||||
function f() public { |
||||
C c = new C(); |
||||
c.setByValue(ts.x); // cannot set x. |
||||
uint test = 1 + c.setByValueAndReturn(ts.x); // cannot set x. |
||||
c.setByValue(x); // cannot set x. |
||||
test = 1 + c.setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,51 @@ |
||||
contract C { |
||||
uint[1] public x; |
||||
|
||||
function f() public { |
||||
setByRef(x); // can set x. |
||||
setByValue(x); // cannot set x. |
||||
uint test = 1 + setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
function g() public { |
||||
uint[1] storage y = x; |
||||
setByRef(y); // can set y. |
||||
setByValue(y); // cannot set y. |
||||
uint test = 1 + setByValueAndReturn(y); // cannot set y. |
||||
} |
||||
|
||||
function setByRef(uint[1] storage arr) internal { |
||||
arr[0] = 1; |
||||
} |
||||
|
||||
function setByValue(uint[1] memory arr) public { |
||||
arr[0] = 2; |
||||
} |
||||
|
||||
function setByValueAndReturn(uint[1] memory arr) public returns(uint) { |
||||
arr[0] = 2; |
||||
return arr[0]; |
||||
} |
||||
} |
||||
|
||||
contract D { |
||||
// Struct definition |
||||
struct TestStruct { |
||||
uint[1] x; |
||||
} |
||||
|
||||
// State Variables |
||||
TestStruct ts; |
||||
uint[1] x; |
||||
|
||||
// Functions |
||||
function f() public { |
||||
C c = new C(); |
||||
c.setByValue(ts.x); // cannot set x. |
||||
uint test = 1 + c.setByValueAndReturn(ts.x); // cannot set x. |
||||
c.setByValue(x); // cannot set x. |
||||
test = 1 + c.setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,51 @@ |
||||
contract C { |
||||
uint[1] public x; |
||||
|
||||
function f() public { |
||||
setByRef(x); // can set x. |
||||
setByValue(x); // cannot set x. |
||||
uint test = 1 + setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
function g() public { |
||||
uint[1] storage y = x; |
||||
setByRef(y); // can set y. |
||||
setByValue(y); // cannot set y. |
||||
uint test = 1 + setByValueAndReturn(y); // cannot set y. |
||||
} |
||||
|
||||
function setByRef(uint[1] storage arr) internal { |
||||
arr[0] = 1; |
||||
} |
||||
|
||||
function setByValue(uint[1] memory arr) public { |
||||
arr[0] = 2; |
||||
} |
||||
|
||||
function setByValueAndReturn(uint[1] memory arr) public returns(uint) { |
||||
arr[0] = 2; |
||||
return arr[0]; |
||||
} |
||||
} |
||||
|
||||
contract D { |
||||
// Struct definition |
||||
struct TestStruct { |
||||
uint[1] x; |
||||
} |
||||
|
||||
// State Variables |
||||
TestStruct ts; |
||||
uint[1] x; |
||||
|
||||
// Functions |
||||
function f() public { |
||||
C c = new C(); |
||||
c.setByValue(ts.x); // cannot set x. |
||||
uint test = 1 + c.setByValueAndReturn(ts.x); // cannot set x. |
||||
c.setByValue(x); // cannot set x. |
||||
test = 1 + c.setByValueAndReturn(x); // cannot set x. |
||||
} |
||||
|
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,20 @@ |
||||
// taken from https://solidity.readthedocs.io/en/v0.4.25/assembly.html |
||||
|
||||
library GetCode { |
||||
function at(address _addr) public view returns (bytes memory o_code) { |
||||
assembly { |
||||
// retrieve the size of the code, this needs assembly |
||||
let size := extcodesize(_addr) |
||||
// allocate output byte array - this could also be done without assembly |
||||
// by using o_code = new bytes(size) |
||||
o_code := mload(0x40) |
||||
// new "memory end" including padding |
||||
mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) |
||||
// store length in memory |
||||
mstore(o_code, size) |
||||
// actually retrieve the code, this needs assembly |
||||
extcodecopy(_addr, add(o_code, 0x20), 0, size) |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,184 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "at", |
||||
"source_mapping": { |
||||
"start": 94, |
||||
"length": 707, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "GetCode", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 731, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "at(address)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 173, |
||||
"length": 622, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 10 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "at", |
||||
"source_mapping": { |
||||
"start": 94, |
||||
"length": 707, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "GetCode", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 731, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "at(address)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "GetCode.at(address) (tests/detectors/assembly/0.6.11/inline_assembly_contract.sol#4-18) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.6.11/inline_assembly_contract.sol#5-17)\n", |
||||
"markdown": "[GetCode.at(address)](tests/detectors/assembly/0.6.11/inline_assembly_contract.sol#L4-L18) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.6.11/inline_assembly_contract.sol#L5-L17)\n", |
||||
"id": "00e51f7f223289ebaad73cd6e77329b37ff5be360d9a682614cb6b72b8e3d9b4", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,47 @@ |
||||
// taken from https://solidity.readthedocs.io/en/v0.4.25/assembly.html |
||||
|
||||
library VectorSum { |
||||
// This function is less efficient because the optimizer currently fails to |
||||
// remove the bounds checks in array access. |
||||
function sumSolidity(uint[] memory _data) public view returns (uint o_sum) { |
||||
for (uint i = 0; i < _data.length; ++i) |
||||
o_sum += _data[i]; |
||||
} |
||||
|
||||
// We know that we only access the array in bounds, so we can avoid the check. |
||||
// 0x20 needs to be added to an array because the first slot contains the |
||||
// array length. |
||||
function sumAsm(uint[] memory _data) public view returns (uint o_sum) { |
||||
for (uint i = 0; i < _data.length; ++i) { |
||||
assembly { |
||||
o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20)))) |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Same as above, but accomplish the entire code within inline assembly. |
||||
function sumPureAsm(uint[] memory _data) public view returns (uint o_sum) { |
||||
assembly { |
||||
// Load the length (first 32 bytes) |
||||
let len := mload(_data) |
||||
|
||||
// Skip over the length field. |
||||
// |
||||
// Keep temporary variable so it can be incremented in place. |
||||
// |
||||
// NOTE: incrementing _data would result in an unusable |
||||
// _data variable after this assembly block |
||||
let data := add(_data, 0x20) |
||||
|
||||
// Iterate until the bound is not met. |
||||
for |
||||
{ let end := add(data, len) } |
||||
lt(data, end) |
||||
{ data := add(data, 0x20) } |
||||
{ |
||||
o_sum := add(o_sum, mload(data)) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,470 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "sumAsm", |
||||
"source_mapping": { |
||||
"start": 574, |
||||
"length": 254, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumAsm(uint256[])" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 708, |
||||
"length": 104, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 14 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "sumAsm", |
||||
"source_mapping": { |
||||
"start": 574, |
||||
"length": 254, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumAsm(uint256[])" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "VectorSum.sumAsm(uint256[]) (tests/detectors/assembly/0.6.11/inline_assembly_library.sol#14-20) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.6.11/inline_assembly_library.sol#16-18)\n", |
||||
"markdown": "[VectorSum.sumAsm(uint256[])](tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L14-L20) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L16-L18)\n", |
||||
"id": "a8d71513166310212c49c4edecbdf8fbc3040b1cb5b5756f0ad1971ae7d4cdb1", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "sumPureAsm", |
||||
"source_mapping": { |
||||
"start": 911, |
||||
"length": 761, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumPureAsm(uint256[])" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 995, |
||||
"length": 671, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 10 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "sumPureAsm", |
||||
"source_mapping": { |
||||
"start": 911, |
||||
"length": 761, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumPureAsm(uint256[])" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "VectorSum.sumPureAsm(uint256[]) (tests/detectors/assembly/0.6.11/inline_assembly_library.sol#23-45) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.6.11/inline_assembly_library.sol#24-44)\n", |
||||
"markdown": "[VectorSum.sumPureAsm(uint256[])](tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L23-L45) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L24-L44)\n", |
||||
"id": "5964c7440a9efb78bf78544bcdc60c789e3d9dff73438108bcb07ac98d60876a", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,20 @@ |
||||
// taken from https://solidity.readthedocs.io/en/v0.4.25/assembly.html |
||||
|
||||
library GetCode { |
||||
function at(address _addr) public view returns (bytes memory o_code) { |
||||
assembly { |
||||
// retrieve the size of the code, this needs assembly |
||||
let size := extcodesize(_addr) |
||||
// allocate output byte array - this could also be done without assembly |
||||
// by using o_code = new bytes(size) |
||||
o_code := mload(0x40) |
||||
// new "memory end" including padding |
||||
mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) |
||||
// store length in memory |
||||
mstore(o_code, size) |
||||
// actually retrieve the code, this needs assembly |
||||
extcodecopy(_addr, add(o_code, 0x20), 0, size) |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,184 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "at", |
||||
"source_mapping": { |
||||
"start": 94, |
||||
"length": 707, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "GetCode", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 731, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "at(address)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 173, |
||||
"length": 622, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 10 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "at", |
||||
"source_mapping": { |
||||
"start": 94, |
||||
"length": 707, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "GetCode", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 731, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "at(address)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "GetCode.at(address) (tests/detectors/assembly/0.7.6/inline_assembly_contract.sol#4-18) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.7.6/inline_assembly_contract.sol#5-17)\n", |
||||
"markdown": "[GetCode.at(address)](tests/detectors/assembly/0.7.6/inline_assembly_contract.sol#L4-L18) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.7.6/inline_assembly_contract.sol#L5-L17)\n", |
||||
"id": "3b2ace4ab64f4fdd4436ae22d38a7db3efe8d2b65dca270af7fb18f281323670", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,47 @@ |
||||
// taken from https://solidity.readthedocs.io/en/v0.4.25/assembly.html |
||||
|
||||
library VectorSum { |
||||
// This function is less efficient because the optimizer currently fails to |
||||
// remove the bounds checks in array access. |
||||
function sumSolidity(uint[] memory _data) public view returns (uint o_sum) { |
||||
for (uint i = 0; i < _data.length; ++i) |
||||
o_sum += _data[i]; |
||||
} |
||||
|
||||
// We know that we only access the array in bounds, so we can avoid the check. |
||||
// 0x20 needs to be added to an array because the first slot contains the |
||||
// array length. |
||||
function sumAsm(uint[] memory _data) public view returns (uint o_sum) { |
||||
for (uint i = 0; i < _data.length; ++i) { |
||||
assembly { |
||||
o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20)))) |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Same as above, but accomplish the entire code within inline assembly. |
||||
function sumPureAsm(uint[] memory _data) public view returns (uint o_sum) { |
||||
assembly { |
||||
// Load the length (first 32 bytes) |
||||
let len := mload(_data) |
||||
|
||||
// Skip over the length field. |
||||
// |
||||
// Keep temporary variable so it can be incremented in place. |
||||
// |
||||
// NOTE: incrementing _data would result in an unusable |
||||
// _data variable after this assembly block |
||||
let data := add(_data, 0x20) |
||||
|
||||
// Iterate until the bound is not met. |
||||
for |
||||
{ let end := add(data, len) } |
||||
lt(data, end) |
||||
{ data := add(data, 0x20) } |
||||
{ |
||||
o_sum := add(o_sum, mload(data)) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,470 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "sumAsm", |
||||
"source_mapping": { |
||||
"start": 574, |
||||
"length": 254, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumAsm(uint256[])" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 708, |
||||
"length": 104, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
16, |
||||
17, |
||||
18 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 14 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "sumAsm", |
||||
"source_mapping": { |
||||
"start": 574, |
||||
"length": 254, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumAsm(uint256[])" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "VectorSum.sumAsm(uint256[]) (tests/detectors/assembly/0.7.6/inline_assembly_library.sol#14-20) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.7.6/inline_assembly_library.sol#16-18)\n", |
||||
"markdown": "[VectorSum.sumAsm(uint256[])](tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L14-L20) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L16-L18)\n", |
||||
"id": "a83582beb2c0460617fa82fbdfc38a050004e285749b17141b63e8051062248b", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "sumPureAsm", |
||||
"source_mapping": { |
||||
"start": 911, |
||||
"length": 761, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumPureAsm(uint256[])" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "", |
||||
"source_mapping": { |
||||
"start": 995, |
||||
"length": 671, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 10 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "sumPureAsm", |
||||
"source_mapping": { |
||||
"start": 911, |
||||
"length": 761, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
23, |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37, |
||||
38, |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "VectorSum", |
||||
"source_mapping": { |
||||
"start": 72, |
||||
"length": 1602, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "sumPureAsm(uint256[])" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "VectorSum.sumPureAsm(uint256[]) (tests/detectors/assembly/0.7.6/inline_assembly_library.sol#23-45) uses assembly\n\t- INLINE ASM (tests/detectors/assembly/0.7.6/inline_assembly_library.sol#24-44)\n", |
||||
"markdown": "[VectorSum.sumPureAsm(uint256[])](tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L23-L45) uses assembly\n\t- [INLINE ASM](tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L24-L44)\n", |
||||
"id": "5cafb3e9d7d87c17203cf2c296eeec7de6b774b2a8d71908f8cfc9b8d916cb4b", |
||||
"check": "assembly", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,568 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "assert(bool)((s_a += 1) > 10)", |
||||
"source_mapping": { |
||||
"start": 106, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.bad0() (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#6-8) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += 1) > 10) (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad0()](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L6-L8) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += 1) > 10)](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "a01104ede08ddc5107a2d63d851930d477642029aeef70d6cb44eb2a640b282a", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)((s_a += a) > 10)", |
||||
"source_mapping": { |
||||
"start": 224, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad1(uint256) (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#11-13) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += a) > 10) (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad1(uint256)](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L11-L13) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += a) > 10)](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "849934acf882563bb79caed681f16909f03795bbbbe8338455d104d66a52314c", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)(bad2_callee())", |
||||
"source_mapping": { |
||||
"start": 427, |
||||
"length": 21, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 26 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad2() (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#19-21) has an assert() call which possibly changes state.\n\t-assert(bool)(bad2_callee()) (tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad2()](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L19-L21) has an assert() call which possibly changes state.\n\t-[assert(bool)(bad2_callee())](tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "47c8c39b084f8d339822d44f892cb049c1a3834f52fd48d2dcef80bac56996a3", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
contract A { |
||||
|
||||
uint s_a; |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad0() public { |
||||
assert((s_a += 1) > 10); |
||||
} |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad1(uint256 a) public { |
||||
assert((s_a += a) > 10); |
||||
} |
||||
|
||||
/* State change via functions calls in assert is NOT ok */ |
||||
function bad2_callee() public returns (bool) { |
||||
return (s_a += 1) > 10; |
||||
} |
||||
function bad2() public { |
||||
assert(bad2_callee()); |
||||
} |
||||
|
||||
|
||||
/* Parameter use is ok */ |
||||
function good0(uint256 a) public { |
||||
assert(a > 10); |
||||
} |
||||
|
||||
/* Parameter change is ok */ |
||||
function good1(uint256 a) public { |
||||
assert((a += 1) > 10); |
||||
} |
||||
|
||||
/* State change in require is ok */ |
||||
function good2(uint256 a) public { |
||||
require(a == (s_a += 1)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,568 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "assert(bool)((s_a += 1) > 10)", |
||||
"source_mapping": { |
||||
"start": 106, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.bad0() (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#6-8) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += 1) > 10) (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad0()](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L6-L8) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += 1) > 10)](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "ed7344e23d057576887c7e524b215bd0b52464ce035f686bab51b271460e43a0", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)((s_a += a) > 10)", |
||||
"source_mapping": { |
||||
"start": 224, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad1(uint256) (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#11-13) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += a) > 10) (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad1(uint256)](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L11-L13) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += a) > 10)](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "ea912d34e8adabfd2ce93ecd5723df8d2e7ebec7e66de5fc56f3304c780488b3", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)(bad2_callee())", |
||||
"source_mapping": { |
||||
"start": 427, |
||||
"length": 21, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 26 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad2() (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#19-21) has an assert() call which possibly changes state.\n\t-assert(bool)(bad2_callee()) (tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad2()](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L19-L21) has an assert() call which possibly changes state.\n\t-[assert(bool)(bad2_callee())](tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "feb1fef411c094fe2d2dac33e4932217dd550b8a89548417ef8a4da2fe99eea2", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
contract A { |
||||
|
||||
uint s_a; |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad0() public { |
||||
assert((s_a += 1) > 10); |
||||
} |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad1(uint256 a) public { |
||||
assert((s_a += a) > 10); |
||||
} |
||||
|
||||
/* State change via functions calls in assert is NOT ok */ |
||||
function bad2_callee() public returns (bool) { |
||||
return (s_a += 1) > 10; |
||||
} |
||||
function bad2() public { |
||||
assert(bad2_callee()); |
||||
} |
||||
|
||||
|
||||
/* Parameter use is ok */ |
||||
function good0(uint256 a) public { |
||||
assert(a > 10); |
||||
} |
||||
|
||||
/* Parameter change is ok */ |
||||
function good1(uint256 a) public { |
||||
assert((a += 1) > 10); |
||||
} |
||||
|
||||
/* State change in require is ok */ |
||||
function good2(uint256 a) public { |
||||
require(a == (s_a += 1)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,568 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "assert(bool)((s_a += 1) > 10)", |
||||
"source_mapping": { |
||||
"start": 106, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad0", |
||||
"source_mapping": { |
||||
"start": 77, |
||||
"length": 57, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "bad0()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.bad0() (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#6-8) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += 1) > 10) (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad0()](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L6-L8) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += 1) > 10)](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L7)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "5b8574d24925d841b9f041ba70166cc219ea6bcdd06c27d2f570740722b38380", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)((s_a += a) > 10)", |
||||
"source_mapping": { |
||||
"start": 224, |
||||
"length": 23, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
12 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 28 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 186, |
||||
"length": 66, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad1(uint256) (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#11-13) has an assert() call which possibly changes state.\n\t-assert(bool)((s_a += a) > 10) (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad1(uint256)](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L11-L13) has an assert() call which possibly changes state.\n\t-[assert(bool)((s_a += a) > 10)](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L12)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "c27ede68d9d7c6159032f3aef6bf9fa491390317da33307fa783a93c1b675bd7", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "assert(bool)(bad2_callee())", |
||||
"source_mapping": { |
||||
"start": 427, |
||||
"length": 21, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
20 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 26 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad2", |
||||
"source_mapping": { |
||||
"start": 398, |
||||
"length": 55, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 3, |
||||
"ending_column": 4 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 759, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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": "A.bad2() (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#19-21) has an assert() call which possibly changes state.\n\t-assert(bool)(bad2_callee()) (tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"markdown": "[A.bad2()](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L19-L21) has an assert() call which possibly changes state.\n\t-[assert(bool)(bad2_callee())](tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L20)\nConsider using require() or change the invariant to not modify the state.\n", |
||||
"id": "6f4b2360043bf3035cc152b583d3462d8cc98e91de8577091fe3a0af569d5285", |
||||
"check": "assert-state-change", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,39 @@ |
||||
contract A { |
||||
|
||||
uint s_a; |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad0() public { |
||||
assert((s_a += 1) > 10); |
||||
} |
||||
|
||||
/* Direct state change in assert is NOT ok */ |
||||
function bad1(uint256 a) public { |
||||
assert((s_a += a) > 10); |
||||
} |
||||
|
||||
/* State change via functions calls in assert is NOT ok */ |
||||
function bad2_callee() public returns (bool) { |
||||
return (s_a += 1) > 10; |
||||
} |
||||
function bad2() public { |
||||
assert(bad2_callee()); |
||||
} |
||||
|
||||
|
||||
/* Parameter use is ok */ |
||||
function good0(uint256 a) public { |
||||
assert(a > 10); |
||||
} |
||||
|
||||
/* Parameter change is ok */ |
||||
function good1(uint256 a) public { |
||||
assert((a += 1) > 10); |
||||
} |
||||
|
||||
/* State change in require is ok */ |
||||
function good2(uint256 a) public { |
||||
require(a == (s_a += 1)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,8 @@ |
||||
|
||||
contract C{ |
||||
|
||||
function i_am_a_backdoor() public{ |
||||
selfdestruct(msg.sender); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,61 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "i_am_a_backdoor", |
||||
"source_mapping": { |
||||
"start": 18, |
||||
"length": 74, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/backdoor/0.5.16/backdoor.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/backdoor/0.5.16/backdoor.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "C", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 94, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/backdoor/0.5.16/backdoor.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/backdoor/0.5.16/backdoor.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "i_am_a_backdoor()" |
||||
} |
||||
} |
||||
], |
||||
"description": "Backdoor function found in C.i_am_a_backdoor() (tests/detectors/backdoor/0.5.16/backdoor.sol#4-6)\n", |
||||
"markdown": "Backdoor function found in [C.i_am_a_backdoor()](tests/detectors/backdoor/0.5.16/backdoor.sol#L4-L6)\n", |
||||
"id": "8a9008f2f5cd23b34feb0235dcc30ecb8d09a10eff151b522939caead117ef7a", |
||||
"check": "backdoor", |
||||
"impact": "High", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,8 @@ |
||||
|
||||
contract C{ |
||||
|
||||
function i_am_a_backdoor() public{ |
||||
selfdestruct(msg.sender); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,61 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "i_am_a_backdoor", |
||||
"source_mapping": { |
||||
"start": 18, |
||||
"length": 74, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/backdoor/0.6.11/backdoor.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/backdoor/0.6.11/backdoor.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "C", |
||||
"source_mapping": { |
||||
"start": 1, |
||||
"length": 94, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/backdoor/0.6.11/backdoor.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/backdoor/0.6.11/backdoor.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "i_am_a_backdoor()" |
||||
} |
||||
} |
||||
], |
||||
"description": "Backdoor function found in C.i_am_a_backdoor() (tests/detectors/backdoor/0.6.11/backdoor.sol#4-6)\n", |
||||
"markdown": "Backdoor function found in [C.i_am_a_backdoor()](tests/detectors/backdoor/0.6.11/backdoor.sol#L4-L6)\n", |
||||
"id": "8a9008f2f5cd23b34feb0235dcc30ecb8d09a10eff151b522939caead117ef7a", |
||||
"check": "backdoor", |
||||
"impact": "High", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,8 @@ |
||||
|
||||
contract C{ |
||||
|
||||
function i_am_a_backdoor() public{ |
||||
selfdestruct(msg.sender); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,27 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
} |
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b == true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
if (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function bad3() public pure returns (bool) { |
||||
uint256 a; |
||||
if (a == 10) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function good(uint8 a) public pure returns (bool) { |
||||
return a >= 1; |
||||
} |
||||
} |
@ -0,0 +1,170 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 139, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7, |
||||
8, |
||||
9 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 578, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "(b == true)", |
||||
"source_mapping": { |
||||
"start": 198, |
||||
"length": 18, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 27 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 139, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7, |
||||
8, |
||||
9 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 578, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.bad1(bool) (tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol#7-9) compares to a boolean constant:\n\t-(b == true) (tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol#8)\n", |
||||
"markdown": "[MyConc.bad1(bool)](tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol#L7-L9) compares to a boolean constant:\n\t-[(b == true)](tests/detectors/boolean-constant-equality/0.5.16/boolean-constant-equality.sol#L8)\n", |
||||
"id": "55f3ed7ce9767b07a34113bd35c34e61c20eb8ec35174086cdfea6c0063bd946", |
||||
"check": "boolean-equal", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,27 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
} |
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b == true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
if (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function bad3() public pure returns (bool) { |
||||
uint256 a; |
||||
if (a == 10) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function good(uint8 a) public pure returns (bool) { |
||||
return a >= 1; |
||||
} |
||||
} |
@ -0,0 +1,170 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 139, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7, |
||||
8, |
||||
9 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 578, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "(b == true)", |
||||
"source_mapping": { |
||||
"start": 198, |
||||
"length": 18, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
8 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 27 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 139, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7, |
||||
8, |
||||
9 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 578, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.bad1(bool) (tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol#7-9) compares to a boolean constant:\n\t-(b == true) (tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol#8)\n", |
||||
"markdown": "[MyConc.bad1(bool)](tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol#L7-L9) compares to a boolean constant:\n\t-[(b == true)](tests/detectors/boolean-constant-equality/0.6.11/boolean-constant-equality.sol#L8)\n", |
||||
"id": "c51b5452fc3e68aff071a2c4ab0963cbbb1b55871b53c0131c11d4cf8abd046f", |
||||
"check": "boolean-equal", |
||||
"impact": "Informational", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,27 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
} |
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b == true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
if (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function bad3() public pure returns (bool) { |
||||
uint256 a; |
||||
if (a == 10) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
function good(uint8 a) public pure returns (bool) { |
||||
return a >= 1; |
||||
} |
||||
} |
@ -0,0 +1,208 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "(b || true)", |
||||
"source_mapping": { |
||||
"start": 221, |
||||
"length": 18, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
10 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 27 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.bad1(bool) (tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol#9-11) uses a Boolean constant improperly:\n\t-(b || true) (tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol#10)\n", |
||||
"markdown": "[MyConc.bad1(bool)](tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol#L9-L11) uses a Boolean constant improperly:\n\t-[(b || true)](tests/detectors/boolean-constant-misuse/0.4.25/boolean-constant-misuse.sol#L10)\n", |
||||
"id": "c8c323396d19d9ddfd97f18ed731c7f07bb1cc030c198c830b595a770aeb26c2", |
||||
"check": "boolean-cst", |
||||
"impact": "Medium", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,46 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b || true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
while (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad3(bool a) public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (a) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad4() public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (true) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad5() public pure returns (bool) { |
||||
while (true) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function good() public pure returns (bool) { |
||||
return true; |
||||
} |
||||
} |
@ -0,0 +1,208 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "(b || true)", |
||||
"source_mapping": { |
||||
"start": 221, |
||||
"length": 18, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
10 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 27 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.bad1(bool) (tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol#9-11) uses a Boolean constant improperly:\n\t-(b || true) (tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol#10)\n", |
||||
"markdown": "[MyConc.bad1(bool)](tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol#L9-L11) uses a Boolean constant improperly:\n\t-[(b || true)](tests/detectors/boolean-constant-misuse/0.5.16/boolean-constant-misuse.sol#L10)\n", |
||||
"id": "f6ceb7e0651a96a88da265b955956fb4a3878f1491c81cf6bc8e433b5006e6aa", |
||||
"check": "boolean-cst", |
||||
"impact": "Medium", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,46 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b || true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
while (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad3(bool a) public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (a) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad4() public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (true) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad5() public pure returns (bool) { |
||||
while (true) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function good() public pure returns (bool) { |
||||
return true; |
||||
} |
||||
} |
@ -0,0 +1,208 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "(b || true)", |
||||
"source_mapping": { |
||||
"start": 221, |
||||
"length": 18, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
10 |
||||
], |
||||
"starting_column": 9, |
||||
"ending_column": 27 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad1", |
||||
"source_mapping": { |
||||
"start": 162, |
||||
"length": 84, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 923, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
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, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 0 |
||||
} |
||||
}, |
||||
"signature": "bad1(bool)" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.bad1(bool) (tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol#9-11) uses a Boolean constant improperly:\n\t-(b || true) (tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol#10)\n", |
||||
"markdown": "[MyConc.bad1(bool)](tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol#L9-L11) uses a Boolean constant improperly:\n\t-[(b || true)](tests/detectors/boolean-constant-misuse/0.6.11/boolean-constant-misuse.sol#L10)\n", |
||||
"id": "0b2599e627a1163a49a4113426fe385f5987d7e247cdbe8e2d9b39988b95478a", |
||||
"check": "boolean-cst", |
||||
"impact": "Medium", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,46 @@ |
||||
contract MyConc { |
||||
function bad0(bool foo) public pure returns (bool) { |
||||
if (foo) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad1(bool b) public pure returns (bool) { |
||||
return (b || true); |
||||
} |
||||
|
||||
function bad2(bool x, uint8 y) public pure returns (bool) { |
||||
while (x == (y > 0)) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function bad3(bool a) public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (a) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad4() public pure returns (bool) { |
||||
uint256 b = 0; |
||||
while (true) { |
||||
b++; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function bad5() public pure returns (bool) { |
||||
while (true) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
function good() public pure returns (bool) { |
||||
return true; |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
contract CallInLoop{ |
||||
|
||||
address[] destinations; |
||||
|
||||
constructor(address[] memory newDestinations) public{ |
||||
destinations = newDestinations; |
||||
} |
||||
|
||||
function bad() external{ |
||||
for (uint i=0; i < destinations.length; i++){ |
||||
address(uint160(destinations[i])).transfer(i); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,148 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "address(uint160(destinations[i])).transfer(i)", |
||||
"source_mapping": { |
||||
"start": 251, |
||||
"length": 45, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 58 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "CallInLoop.bad() (tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol#9-13) has external calls inside a loop: address(uint160(destinations[i])).transfer(i) (tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol#11)\n", |
||||
"markdown": "[CallInLoop.bad()](tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol#L9-L13) has external calls inside a loop: [address(uint160(destinations[i])).transfer(i)](tests/detectors/calls-loop/0.5.16/multiple_calls_in_loop.sol#L11)\n", |
||||
"id": "47b82a76ee810d93f014f425eefea8adbb806036dfee401a9883b1aa3ca85c44", |
||||
"check": "calls-loop", |
||||
"impact": "Low", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,15 @@ |
||||
contract CallInLoop{ |
||||
|
||||
address[] destinations; |
||||
|
||||
constructor(address[] memory newDestinations) public{ |
||||
destinations = newDestinations; |
||||
} |
||||
|
||||
function bad() external{ |
||||
for (uint i=0; i < destinations.length; i++){ |
||||
address(uint160(destinations[i])).transfer(i); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,148 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "address(uint160(destinations[i])).transfer(i)", |
||||
"source_mapping": { |
||||
"start": 251, |
||||
"length": 45, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 58 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "CallInLoop.bad() (tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol#9-13) has external calls inside a loop: address(uint160(destinations[i])).transfer(i) (tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol#11)\n", |
||||
"markdown": "[CallInLoop.bad()](tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol#L9-L13) has external calls inside a loop: [address(uint160(destinations[i])).transfer(i)](tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol#L11)\n", |
||||
"id": "f7fa2b373fe4eb9207d3ed267d99d7ca34ec7d786898816bc113c3e20079a411", |
||||
"check": "calls-loop", |
||||
"impact": "Low", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,15 @@ |
||||
contract CallInLoop{ |
||||
|
||||
address[] destinations; |
||||
|
||||
constructor(address[] memory newDestinations) public{ |
||||
destinations = newDestinations; |
||||
} |
||||
|
||||
function bad() external{ |
||||
for (uint i=0; i < destinations.length; i++){ |
||||
address(uint160(destinations[i])).transfer(i); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,148 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"name": "address(uint160(destinations[i])).transfer(i)", |
||||
"source_mapping": { |
||||
"start": 251, |
||||
"length": 45, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
11 |
||||
], |
||||
"starting_column": 13, |
||||
"ending_column": 58 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "function", |
||||
"name": "bad", |
||||
"source_mapping": { |
||||
"start": 160, |
||||
"length": 153, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 6 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "CallInLoop", |
||||
"source_mapping": { |
||||
"start": 0, |
||||
"length": 316, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
1, |
||||
2, |
||||
3, |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
}, |
||||
"signature": "bad()" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "CallInLoop.bad() (tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol#9-13) has external calls inside a loop: address(uint160(destinations[i])).transfer(i) (tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol#11)\n", |
||||
"markdown": "[CallInLoop.bad()](tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol#L9-L13) has external calls inside a loop: [address(uint160(destinations[i])).transfer(i)](tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol#L11)\n", |
||||
"id": "c06ed4f7f79cddc5fbc2f828500766cab0a6d18b262a0f8e9c227cef7e6607df", |
||||
"check": "calls-loop", |
||||
"impact": "Low", |
||||
"confidence": "Medium" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,52 @@ |
||||
//pragma solidity ^0.4.24; |
||||
|
||||
|
||||
contract A { |
||||
|
||||
address constant public MY_ADDRESS = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; |
||||
address public myFriendsAddress = 0xc0ffee254729296a45a3885639AC7E10F9d54979; |
||||
|
||||
uint public used; |
||||
uint public test = 5; |
||||
|
||||
uint constant X = 32**22 + 8; |
||||
string constant TEXT1 = "abc"; |
||||
string text2 = "xyz"; |
||||
|
||||
function setUsed() public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = test; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
contract B is A { |
||||
|
||||
address public mySistersAddress = 0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E; |
||||
|
||||
function () external { |
||||
used = 0; |
||||
} |
||||
|
||||
function setUsed(uint a) public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = a; |
||||
} |
||||
} |
||||
} |
||||
|
||||
contract MyConc{ |
||||
|
||||
uint constant A = 1; |
||||
bytes32 should_be_constant = sha256('abc'); |
||||
uint should_be_constant_2 = A + 1; |
||||
address not_constant = msg.sender; |
||||
uint not_constant_2 = getNumber(); |
||||
uint not_constant_3 = 10 + block.number; |
||||
|
||||
function getNumber() public returns(uint){ |
||||
return block.number; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,382 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "myFriendsAddress", |
||||
"source_mapping": { |
||||
"start": 132, |
||||
"length": 76, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 81 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.myFriendsAddress (tests/detectors/constable-states/0.5.16/const_state_variables.sol#7) should be constant\n", |
||||
"markdown": "[A.myFriendsAddress](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L7) should be constant\n", |
||||
"id": "1454db80653b732bf6acbe54ff0ae4707002207a2a8216708c12d61c88a43e5f", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "test", |
||||
"source_mapping": { |
||||
"start": 237, |
||||
"length": 20, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 25 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.test (tests/detectors/constable-states/0.5.16/const_state_variables.sol#10) should be constant\n", |
||||
"markdown": "[A.test](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L10) should be constant\n", |
||||
"id": "5d9e3fb413322b71a93e90f7e89bd8c83cd4884d577d039598c681fe9db38b1d", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "text2", |
||||
"source_mapping": { |
||||
"start": 333, |
||||
"length": 20, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 25 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.text2 (tests/detectors/constable-states/0.5.16/const_state_variables.sol#14) should be constant\n", |
||||
"markdown": "[A.text2](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L14) should be constant\n", |
||||
"id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "mySistersAddress", |
||||
"source_mapping": { |
||||
"start": 496, |
||||
"length": 76, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
26 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 81 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "B", |
||||
"source_mapping": { |
||||
"start": 473, |
||||
"length": 271, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "B.mySistersAddress (tests/detectors/constable-states/0.5.16/const_state_variables.sol#26) should be constant\n", |
||||
"markdown": "[B.mySistersAddress](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L26) should be constant\n", |
||||
"id": "bee93a722c8eae4a48aade67d8ef537d84c106f48fc9eb738c795fce10d3bc63", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "should_be_constant", |
||||
"source_mapping": { |
||||
"start": 793, |
||||
"length": 42, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
42 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 47 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 746, |
||||
"length": 342, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47, |
||||
48, |
||||
49, |
||||
50, |
||||
51, |
||||
52 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.should_be_constant (tests/detectors/constable-states/0.5.16/const_state_variables.sol#42) should be constant\n", |
||||
"markdown": "[MyConc.should_be_constant](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L42) should be constant\n", |
||||
"id": "cbcafa2a3efba4d21ac1b51b4b823e5082d556bc3d6cf3fd2ab3188f9f218fc1", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "should_be_constant_2", |
||||
"source_mapping": { |
||||
"start": 841, |
||||
"length": 33, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
43 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 38 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 746, |
||||
"length": 342, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.5.16/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47, |
||||
48, |
||||
49, |
||||
50, |
||||
51, |
||||
52 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.5.16/const_state_variables.sol#43) should be constant\n", |
||||
"markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.5.16/const_state_variables.sol#L43) should be constant\n", |
||||
"id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,52 @@ |
||||
//pragma solidity ^0.4.24; |
||||
|
||||
|
||||
contract A { |
||||
|
||||
address constant public MY_ADDRESS = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; |
||||
address public myFriendsAddress = 0xc0ffee254729296a45a3885639AC7E10F9d54979; |
||||
|
||||
uint public used; |
||||
uint public test = 5; |
||||
|
||||
uint constant X = 32**22 + 8; |
||||
string constant TEXT1 = "abc"; |
||||
string text2 = "xyz"; |
||||
|
||||
function setUsed() public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = test; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
contract B is A { |
||||
|
||||
address public mySistersAddress = 0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E; |
||||
|
||||
fallback () external { |
||||
used = 0; |
||||
} |
||||
|
||||
function setUsed(uint a) public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = a; |
||||
} |
||||
} |
||||
} |
||||
|
||||
contract MyConc{ |
||||
|
||||
uint constant A = 1; |
||||
bytes32 should_be_constant = sha256('abc'); |
||||
uint should_be_constant_2 = A + 1; |
||||
address not_constant = msg.sender; |
||||
uint not_constant_2 = getNumber(); |
||||
uint not_constant_3 = 10 + block.number; |
||||
|
||||
function getNumber() public returns(uint){ |
||||
return block.number; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,382 @@ |
||||
[ |
||||
[ |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "myFriendsAddress", |
||||
"source_mapping": { |
||||
"start": 132, |
||||
"length": 76, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
7 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 81 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.myFriendsAddress (tests/detectors/constable-states/0.6.11/const_state_variables.sol#7) should be constant\n", |
||||
"markdown": "[A.myFriendsAddress](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L7) should be constant\n", |
||||
"id": "1454db80653b732bf6acbe54ff0ae4707002207a2a8216708c12d61c88a43e5f", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "test", |
||||
"source_mapping": { |
||||
"start": 237, |
||||
"length": 20, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
10 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 25 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.test (tests/detectors/constable-states/0.6.11/const_state_variables.sol#10) should be constant\n", |
||||
"markdown": "[A.test](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L10) should be constant\n", |
||||
"id": "5d9e3fb413322b71a93e90f7e89bd8c83cd4884d577d039598c681fe9db38b1d", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "text2", |
||||
"source_mapping": { |
||||
"start": 333, |
||||
"length": 20, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
14 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 25 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "A", |
||||
"source_mapping": { |
||||
"start": 29, |
||||
"length": 441, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
4, |
||||
5, |
||||
6, |
||||
7, |
||||
8, |
||||
9, |
||||
10, |
||||
11, |
||||
12, |
||||
13, |
||||
14, |
||||
15, |
||||
16, |
||||
17, |
||||
18, |
||||
19, |
||||
20, |
||||
21 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "A.text2 (tests/detectors/constable-states/0.6.11/const_state_variables.sol#14) should be constant\n", |
||||
"markdown": "[A.text2](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L14) should be constant\n", |
||||
"id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "mySistersAddress", |
||||
"source_mapping": { |
||||
"start": 496, |
||||
"length": 76, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
26 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 81 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "B", |
||||
"source_mapping": { |
||||
"start": 473, |
||||
"length": 271, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
24, |
||||
25, |
||||
26, |
||||
27, |
||||
28, |
||||
29, |
||||
30, |
||||
31, |
||||
32, |
||||
33, |
||||
34, |
||||
35, |
||||
36, |
||||
37 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "B.mySistersAddress (tests/detectors/constable-states/0.6.11/const_state_variables.sol#26) should be constant\n", |
||||
"markdown": "[B.mySistersAddress](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L26) should be constant\n", |
||||
"id": "bee93a722c8eae4a48aade67d8ef537d84c106f48fc9eb738c795fce10d3bc63", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "should_be_constant", |
||||
"source_mapping": { |
||||
"start": 793, |
||||
"length": 42, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
42 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 47 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 746, |
||||
"length": 342, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47, |
||||
48, |
||||
49, |
||||
50, |
||||
51, |
||||
52 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.should_be_constant (tests/detectors/constable-states/0.6.11/const_state_variables.sol#42) should be constant\n", |
||||
"markdown": "[MyConc.should_be_constant](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L42) should be constant\n", |
||||
"id": "cbcafa2a3efba4d21ac1b51b4b823e5082d556bc3d6cf3fd2ab3188f9f218fc1", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
}, |
||||
{ |
||||
"elements": [ |
||||
{ |
||||
"type": "variable", |
||||
"name": "should_be_constant_2", |
||||
"source_mapping": { |
||||
"start": 841, |
||||
"length": 33, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
43 |
||||
], |
||||
"starting_column": 5, |
||||
"ending_column": 38 |
||||
}, |
||||
"type_specific_fields": { |
||||
"parent": { |
||||
"type": "contract", |
||||
"name": "MyConc", |
||||
"source_mapping": { |
||||
"start": 746, |
||||
"length": 342, |
||||
"filename_used": "/GENERIC_PATH", |
||||
"filename_relative": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"filename_absolute": "/GENERIC_PATH", |
||||
"filename_short": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", |
||||
"is_dependency": false, |
||||
"lines": [ |
||||
39, |
||||
40, |
||||
41, |
||||
42, |
||||
43, |
||||
44, |
||||
45, |
||||
46, |
||||
47, |
||||
48, |
||||
49, |
||||
50, |
||||
51, |
||||
52 |
||||
], |
||||
"starting_column": 1, |
||||
"ending_column": 2 |
||||
} |
||||
} |
||||
} |
||||
} |
||||
], |
||||
"description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.6.11/const_state_variables.sol#43) should be constant\n", |
||||
"markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.6.11/const_state_variables.sol#L43) should be constant\n", |
||||
"id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", |
||||
"check": "constable-states", |
||||
"impact": "Optimization", |
||||
"confidence": "High" |
||||
} |
||||
] |
||||
] |
@ -0,0 +1,52 @@ |
||||
//pragma solidity ^0.4.24; |
||||
|
||||
|
||||
contract A { |
||||
|
||||
address constant public MY_ADDRESS = 0xE0f5206BBD039e7b0592d8918820024e2a7437b9; |
||||
address public myFriendsAddress = 0xc0ffee254729296a45a3885639AC7E10F9d54979; |
||||
|
||||
uint public used; |
||||
uint public test = 5; |
||||
|
||||
uint constant X = 32**22 + 8; |
||||
string constant TEXT1 = "abc"; |
||||
string text2 = "xyz"; |
||||
|
||||
function setUsed() public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = test; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
contract B is A { |
||||
|
||||
address public mySistersAddress = 0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E; |
||||
|
||||
fallback () external { |
||||
used = 0; |
||||
} |
||||
|
||||
function setUsed(uint a) public { |
||||
if (msg.sender == MY_ADDRESS) { |
||||
used = a; |
||||
} |
||||
} |
||||
} |
||||
|
||||
contract MyConc{ |
||||
|
||||
uint constant A = 1; |
||||
bytes32 should_be_constant = sha256('abc'); |
||||
uint should_be_constant_2 = A + 1; |
||||
address not_constant = msg.sender; |
||||
uint not_constant_2 = getNumber(); |
||||
uint not_constant_3 = 10 + block.number; |
||||
|
||||
function getNumber() public returns(uint){ |
||||
return block.number; |
||||
} |
||||
|
||||
} |
@ -1,4 +1,4 @@ |
||||
pragma solidity 0.5.1; |
||||
// pragma solidity 0.5.1; |
||||
|
||||
contract Constant { |
||||
|
@ -0,0 +1,20 @@ |
||||
// pragma solidity 0.5.1; |
||||
|
||||
contract Constant { |
||||
|
||||
uint a; |
||||
|
||||
|
||||
function test_view_shadow() public view{ |
||||
uint a; |
||||
a = 0; |
||||
} |
||||
|
||||
function test_view() public view{ |
||||
a; |
||||
} |
||||
|
||||
function test_assembly_bug() public view{ |
||||
assembly{} |
||||
} |
||||
} |
@ -0,0 +1,20 @@ |
||||
// pragma solidity 0.5.1; |
||||
|
||||
contract Constant { |
||||
|
||||
uint a; |
||||
|
||||
|
||||
function test_view_shadow() public view{ |
||||
uint a; |
||||
a = 0; |
||||
} |
||||
|
||||
function test_view() public view{ |
||||
a; |
||||
} |
||||
|
||||
function test_assembly_bug() public view{ |
||||
assembly{} |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue